问题标签 [reconnect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - socket.io 重新连接是否重新运行连接?
我已经构建了一个简单的 Web 应用程序,它使用 socket.io 通过 node.js 服务器进行一些通信。
当用户连接时,节点会返回信息,告诉客户端订阅某些事件。这很好用。
但是,如果您让浏览器设置为空闲,则客户端最终会订阅事件两次。订阅过程如下:
当用户连接 node.js 时,会收到一条“adduser”消息
该功能中发生的两个关键事情是:
socket.emit('nodeinfo') 通知客户端订阅事件。
所以客户有
问题是它永远不会说“你已连接”两次,“adduser”中的任何 console.log() 函数都不会在节点端再次被调用。唯一似乎发生的事情是 node.js 再次发出 nodeinfo (或者客户端认为)导致客户端重新订阅。
谁能向我解释 socket.io 中的重新连接是如何工作的以及这可能会如何发生?
node.js - Node JS Redis 客户端连接重试
目前我正在使用https://github.com/mranney/node_redis作为我的节点 redis 客户端。
client.retry_delay
默认设置为 250 毫秒。
我尝试连接到redis,一旦连接成功,我手动停止了redis服务器以查看是否client.retry_delay
有效。但我没有看到它工作。
以下日志消息在使用创建的 redisClients上记录ready
和事件:end
createClient
当服务器恢复正常时,我没有再次看到成功消息 [未触发就绪事件]。
我错过了什么吗?什么时候使用重试常量?是否有办法在节点发生故障后查找 redis 服务器是否启动?
java - Smack 客户端 - 尽管连接中止,但用户仍然“在线”
我使用 smack 构建一个小型 XMPP 客户端/机器人时遇到了一个非常奇怪的行为。我设置了连接以及 ConnectionListener 和 ChatManagerListener。这工作得很好,然后我可以与在便携式设备上运行的应用程序聊天。
为了测试失去连接的行为,我拔掉了便携式设备的以太网电缆。我预计 XMPP 客户端会丢失连接,并且用户将在用户好友名单中设置为“离线”。发生的情况是,该用户仍显示为“在线”,并且我的客户端的 ConnectionListener 没有触发任何内容,无论是 connectionClosed 还是 reconnectionFailed 或其他。
然后当我重新插入以太网电缆时,有时就像连接一直处于活动状态一样。处理了离线消息,我可以像以前一样再次聊天。其他时候,我的客户完全无法访问并且出现故障,似乎所有的听众都走了……但没有抛出任何异常。
这是一种非常奇怪且无法控制的行为,它会使整个客户端对我无法使用,因为我无法确定在连接被中止后客户端是否会再次出现。
有没有其他人遇到过这样的问题或有任何暗示(没有)发生了什么?
如果需要,我可以提供我的代码,但实际上只是从 Smack 文档中复制和粘贴。
event-handling - WebSocket.onclose 应该由用户导航触发还是刷新触发?
第 1 部分:预期行为?
我看到 Firefox 和 Chrome 之间与onclose
被调用的处理程序有关的浏览器行为不一致。
onclose
如果它是由用户页面导航/刷新引起的,Chrome 似乎不会触发。但是,Firefox 确实会触发onclose
.
在我看来,Firefox 在这里的行为可能是正确的:
当 WebSocket 连接关闭时,可能是干净的,用户代理必须创建一个使用 CloseEvent 接口的事件,事件名称为 close,不冒泡,不可取消,没有默认操作,其 wasClean 属性设置为 true如果连接干净关闭,否则为false,其code属性设置为WebSocket连接关闭代码,其原因属性设置为WebSocket连接关闭原因;并排队一个任务,首先将 readyState 属性的值更改为 CLOSED (3),然后在 WebSocket 对象处分派事件。
资料来源:http ://www.w3.org/TR/2011/WD-websockets-20110419/#closeWebSocket
即使它可能导致一些鬼鬼祟祟的代码/意外行为。
任何人都可以确认预期的行为吗?
第 2 部分:如何实现自动重新连接?
如果您有一个为用户自动重新连接的库,您如何知道是否应该尝试重新连接?你检查CloseEvent.wasClean
财产吗?我不得不假设“干净”意味着关闭应该通过 API 调用WebSocket.close()
或服务器发送关闭帧来发生?如果网络错误导致关闭,我猜wasClean
会是false
什么?
在 Pusher JavaScript 库中,我们假设(onclose -> waiting -> connected)关闭应该触发重新连接,除非我们处于关闭状态 - 开发人员选择关闭连接。socket.io 客户端库似乎做出了相同的假设。
基于此,由用户导航/刷新引起的 Firefox onclose 事件会触发不需要的重新连接,因为两个库都不会检查该CloseEvent.wasClean
属性。
示例和视频
这是一个可用于演示不一致的示例:http: //jsbin.com/awonod/7
这是我演示问题的视频: http ://www.screenr.com/vHn8 (已经很晚了,忽略这两个错误:))
需要注意的一点是,我按下 Escape 键也可能导致 WebSocket 连接关闭。但是,如果您仔细观察或亲自尝试,您将看到在页面刷新之前记录的关闭事件。
ios - iOS:XMPP 与 Old School SSL 连接重新连接
XMPPFramework
XMPPReconnect
提供了一个名为“意外断开”的扩展,并自动重新连接流。
这适用于正常连接的设置:
但不适用于这个 Old School SSL 连接:
错误libxmlErrorDomain
代码4
与描述的错误Document is empty
被连续抛出,
有时,也会抛出带有描述的GCDAsyncSocketErrorDomain
错误代码。4
Read operation timed out
请建议我在XMPPReconnect
Old School SSL 连接上进行工作的方法。
PS XMPP 服务器是openfire
身份PLAIN
验证机制。
java - 运行时 JMS 服务器重新启动后发送 JMS 消息
我对 JMS 有疑问。问题是,我有一个应用程序,它正在尝试通过 JMS 发送消息,但是在 JMS 服务器重新启动后,它会在服务器停机时抛出异常。它没有重新连接。
无需重新启动 JMS 服务器就可以了,我使用的是 weblogic 10.x。
JMS配置有问题吗?
谢谢
python - Python客户端不会重新连接到服务器
对不起我的英语,但我的软件有一些问题,我需要一些帮助。但首先,一些代码!
客户端:
服务器端:(网上找的)
如果我重新启动/断开服务器,客户端不会重新连接。我使用.terminate()
and.close()
方法关闭了套接字。
mysql - Ruby mysql gem“重新连接”对象变量
在脚本运行一段时间后,我在 Ruby 中遇到了“mysql has gone away”错误。
我想尝试告诉 mysql gem 在连接丢失时自动重新连接。
我当前的代码如下所示:
以下指南 [0] 说 mysql gem 有一个“重新连接”对象变量,但是,我不确定如何在我的代码中使用它。
如何在上面的代码中实现这个选项?
在此先感谢,瑞安
[0] http://www.tmtm.org/en/mysql/ruby/
编辑 - -
好的。我想我已经想通了。
我需要在行@@dbh.reconnect = true
后添加@@dbh = Mysql.real_connect(@@server, @@user, @@pass, @@db)
。
注意:根据 IRC 上的 'nice' chapy,mysql gem 可能不是最好的 Ruby gem。
ios5 - 与两名以上玩家重新连接到 GKMatch
我正在测试一个 Game Center 游戏,特别是当玩家暂时退出(电话、后台等)时会发生什么我希望能够暂停游戏并在玩家再次活跃时重新连接。
这在两人游戏中可以正常工作,因为 match:shouldReinvitePlayer 功能会导致玩家被重新邀请,但 Apple 指定这仅适用于两人游戏。
在三人(或更多)游戏中,我在 appDelegate applicationWillEnterForeground 中处理此问题,如下所示;
发生的情况是现有的两个玩家高兴地“ping”走,当调用应用程序委托代码时(在再次活跃的玩家中)匹配不为零并且playedIDs数组中没有任何内容,但完成处理程序从未出现被调用并且再次“复活”的玩家永远不会重新连接。
我还在“实时”播放器的调试日志中发现了一个特殊的模式,显示进入后台的播放器已经多次将状态更改为“断开连接”,中间没有任何“连接”。
所以......当 GKMATCH 被推到后台然后复活时,是否可以期待它有意义。如何重新连接?可能吗?
java - 连接到 WiFi 为什么 .disconnect() 而不是 reconnect()?
全部 - 我有一个应用程序,我希望用户能够在其中连接 WiFi 网络。我查看了这个问题,我让应用程序能够断开连接然后重新连接(换句话说,我有正确的 SSID 和密码),但他并不是我想要做的。如果尚未连接,我只想连接,如果已经连接,则不做任何事情。当我关闭 WiFi(通过设置)并运行我的应用程序时,什么也没发生。所以比我试过这个
与此相比
但是,此更改无济于事(即使 WiFi 已打开)。所以我的问题是,如果还没有打开,我怎么能打开 WiFi,如果已经打开,什么也不做(我知道我必须使用 if 语句,所以我只是在寻找 WiFi 特定的代码)?谢谢你的时间!