gpt4 book ai didi

ruby - EventMachine 重新连接问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:11:09 26 4
gpt4 key购买 nike

我对一般编程还很陌生,我在客户端和服务器端都使用 EventMachine 来打开它们之间的 websocket 连接。

我的问题出在客户端,以及由于网络连接问题导致连接丢失时。

def websocket_connection
EM.run do
begin
puts "Connecting"
ws = WebSocket::EventMachine::Client.connect(:uri => "Server Info")
puts "Success WS: #{ws}"
rescue
puts "I've been rescued"
puts "Rescue WS: #{ws}"
ws = nil
sleep 10
websocket_connection
end

ws.onopen do
puts "Connected!"
end

ws.onping do
put "Ping!"
end

ws.onmessage do |msg|
puts msg
end

ws.onclose do |code|
puts "Connection Closed!"
puts "Code: #{code}"
ws = nil
sleep 10
websocket_connection
end
end
end

这可以很好地连接到服务器,但是如果我拔出网络连接并将其重新插入,我将陷入无限循环,尝试使用代码 1002(WebSocket 协议(protocol)错误)重新连接。

我尝试在关闭时调用 EM.reconnect(server, port, ws),但它崩溃并抛出此错误“connect_server”:无法解析地址:请求的名称有效,但没有请求类型的数据被找到。这是有道理的,因为它无法联系 DNS。即使将 EM.reconnect 包装在 begin rescue 中,它也只会尝试一次而不会再尝试。

我曾尝试停止 EventMachine 并关闭 (EM.stop),但在尝试重新连接时陷入无限循环。

我不太确定如何让这个客户端在网络丢失后重新连接到服务器。

编辑:稍微更新了上面的代码。

指令行:
成功 WS:#WebSocket::EventMachine::Client:0x00000002909ac8
拉以太网电缆
救援WS:
已连接以太网电缆
成功 WS:#WebSocket::EventMachine::Client:0x000000031c42a8
成功 WS:#WebSocket::EventMachine::Client:0x000000031a3d50
成功 WS:#WebSocket::EventMachine::Client:0x00000003198a90
CTRL + C
block in websocket_connection': undefined methodonopen' for nil:NilClass (NoMethodError)

所以看起来它认为它正在连接,我在服务器端没有看到任何连接。

最佳答案

好吧,我找不到使用 EventMachine 进行正确重新连接的方法。当您断开网络连接时,EventMachine 中似乎发生了奇怪的事情。我最终在一个新进程下重新启动了 ruby​​ 应用程序,然后终止了当前脚本,这不是执行此操作的最佳方法,但在尝试通过 EventMachine 重新连接工作一周后,我刚刚放弃了。此代码在下面工作。

def websocket_restart
exec "ruby script"
exit 0
end

def websocket_connection
EM.run do
begin
puts "Connecting"
ws = WebSocket::EventMachine::Client.connect(:uri => "Server Info")
rescue
websocket_restart
end

ws.onopen do
puts "Connected!"
end

ws.onping do
put "Ping!"
end

ws.onmessage do |msg|
puts msg
end

ws.onclose do |code|
puts "Connection Closed!"
puts "Code: #{code}"
websocket_restart
end
end
end

关于ruby - EventMachine 重新连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44314217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com