程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Ruby 客户端-服务器套接字拥塞大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Ruby 客户端-服务器套接字拥塞?

开发过程中遇到Ruby 客户端-服务器套接字拥塞的问题如何解决?下面主要结合日常开发的经验,给出你关于Ruby 客户端-服务器套接字拥塞的解决方法建议,希望对你解决Ruby 客户端-服务器套接字拥塞有所启发或帮助;

我正在使用 TCP 套接字制作游戏客户端-服务器,一切都很好,但是当我用 10 个机器人客户端+我使用官方客户端进行模拟一段时间后,它变得拥挤时,机器人只发送随机数据,例如: "GET_PLAYER_INFO" 表示服务器返回一串 ~247 个字符和另外 3 个每一个 ~20 个字符的字符串。

代码如此之多,我编写了一个简单的代码,却出现了同样的问题:

server.rb

require 'socket'
require 'Json'

PORT = 8888

def send_to_all(msg)
    for clIEnt in @clIEnts.values
        clIEnt.puts(msg)
    end
end

@server = Tcpserver.new("0.0.0.0",PORT)
@clIEnts = {}
@clIEnts_ID = 1

loop do
    socket = @server.accept
    ID = @clIEnts_ID
    @clIEnts[ID] = socket
    @clIEnts_ID += 1
    puts "Welcome: #{ID}"
    Thread.new(ID) do |clIEnt_ID|
        clIEnt = @clIEnts[clIEnt_ID]
        clIEnt.puts({'ID': clIEnt_ID}.to_Json)
        loop do
            begin
                data = clIEnt.gets
            rescue
                break
            end
            if Data != nil
                data = data.chomp
                send_to_all({'ID': clIEnt_ID,'@R_450_8798@ge': "#{data}"}.to_Json)
            else
                break
            end
        end
        puts "Bye: #{ClIEnt_ID}"
        @clIEnts.delete(clIEnt_ID)
    end
end

@server.close

clIEnt.rb

require 'socket'
require 'Json'

HOST = "localhost"
PORT = 8888

socket = Tcpsocket.new(HOST,PORT)
ID = JsON.parse(socket.gets.chomp)['ID']
Thread.new(socket) do |server|
    loop do
        begin
            data = server.gets
            if Data != nil
                data = JsON.parse(data.chomp)
                if Data['ID'] == ID
                    puts "#{data['ID']}: #{data['@R_450_8798@ge']}"
                end
            else
                break
            end
        rescue
        end
    end
    puts "broken"
end

loop do
    String = gets.chomp
    if %w{q quit exit closE}.include?(String.downcasE)
        break
    else
        socket.puts String
    end
end

socket.close

clIEnts.rb

require 'socket'
require 'Json'

HOST = "localhost"
PORT = 8888
CLIENTS = 10
WORDS = [
    "a" * 24,"b" * 17,"c" * 22,"d" * 256
]


CLIENTs.times do
    socket = Tcpsocket.new(HOST,PORT)
    socket.puts ""
    Thread.new(socket) do |server|
        puts WORDs.sample
        begin
            loop do
                server.gets
                server.puts WORDs.sample
                sleep 0.1
            end
        rescue
            puts "ERROR"
        end
    end
end

loop do
    count = Thread.List.size
    puts count
    if count == 1
        break
    end
    sleep 1
end

服务器将从客户端接收数据并将其发送回所有客户端。

客户端会从服务器读取数据并且什么都不做,然后会向服务器发送一些随机消息。

只需运行 server.rb、clIEnts.rb 然后运行 ​​clIEnt.rb 它会读取你的键盘所以输入一些东西并按 [Enter] 然后它会将它发送到服务器,然后服务器将它发送回所有客户端,所以clIEnt.rb 检查消息是否是您的并将其打印在控制台中,否则将从其他客户端读取数据但不会在控制台中打印,继续执行此操作,一段时间后您键入内容并将其发送到服务器,会很拥挤,以至于您将无法在控制台中收到要打印的信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的Ruby 客户端-服务器套接字拥塞全部内容,希望文章能够帮你解决Ruby 客户端-服务器套接字拥塞所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: