大佬教程收集整理的这篇文章主要介绍了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,请注明来意。