问题标签 [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.

0 投票
1 回答
3686 浏览

node.js - socket.io 重新连接是否重新运行连接?

我已经构建了一个简单的 Web 应用程序,它使用 socket.io 通过 node.js 服务器进行一些通信。

当用户连接时,节点会返回信息,告诉客户端订阅某些事件。这很好用。

但是,如果您让浏览器设置为空闲,则客户端最终会订阅事件两次。订阅过程如下:

当用户连接 node.js 时,会收到一条“adduser”消息

该功能中发生的两个关键事情是:

socket.emit('nodeinfo') 通知客户端订阅事件。

所以客户有

问题是它永远不会说“你已连接”两次,“adduser”中的任何 console.log() 函数都不会在节点端再次被调用。唯一似乎发生的事情是 node.js 再次发出 nodeinfo (或者客户端认为)导致客户端重新订阅。

谁能向我解释 socket.io 中的重新连接是如何工作的以及这可能会如何发生?

0 投票
3 回答
16070 浏览

node.js - Node JS Redis 客户端连接重试

目前我正在使用https://github.com/mranney/node_redis作为我的节点 redis 客户端。

client.retry_delay默认设置为 250 毫秒。

我尝试连接到redis,一旦连接成功,我手动停止了redis服务器以查看是否client.retry_delay有效。但我没有看到它工作。

以下日志消息在使用创建的 redisClients上记录ready和事件:endcreateClient

当服务器恢复正常时,我没有再次看到成功消息 [未触发就绪事件]。

我错过了什么吗?什么时候使用重试常量?是否有办法在节点发生故障后查找 redis 服务器是否启动?

0 投票
2 回答
4616 浏览

java - Smack 客户端 - 尽管连接中止,但用户仍然“在线”

我使用 smack 构建一个小型 XMPP 客户端/机器人时遇到了一个非常奇怪的行为。我设置了连接以及 ConnectionListener 和 ChatManagerListener。这工作得很好,然后我可以与在便携式设备上运行的应用程序聊天。

为了测试失去连接的行为,我拔掉了便携式设备的以太网电缆。我预计 XMPP 客户端会丢失连接,并且用户将在用户好友名单中设置为“离线”。发生的情况是,该用户仍显示为“在线”,并且我的客户端的 ConnectionListener 没有触发任何内容,无论是 connectionClosed 还是 reconnectionFailed 或其他。

然后当我重新插入以太网电缆时,有时就像连接一直处于活动状态一样。处理了离线消息,我可以像以前一样再次聊天。其他时候,我的客户完全无法访问并且出现故障,似乎所有的听众都走了……但没有抛出任何异常。

这是一种非常奇怪且无法控制的行为,它会使整个客户端对我无法使用,因为我无法确定在连接被中止后客户端是否会再次出现。

有没有其他人遇到过这样的问题或有任何暗示(没有)发生了什么?

如果需要,我可以提供我的代码,但实际上只是从 Smack 文档中复制和粘贴。

0 投票
2 回答
15769 浏览

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 连接关闭。但是,如果您仔细观察或亲自尝试,您将看到在页面刷新之前记录的关闭事件。

0 投票
1 回答
1778 浏览

ios - iOS:XMPP 与 Old School SSL 连接重新连接

XMPPFrameworkXMPPReconnect提供了一个名为“意外断开”的扩展,并自动重新连接流。

这适用于正常连接的设置:

但不适用于这个 Old School SSL 连接:

错误libxmlErrorDomain代码4与描述的错误Document is empty被连续抛出,

有时,也会抛出带有描述的GCDAsyncSocketErrorDomain错误代码。4Read operation timed out

请建议我在XMPPReconnectOld School SSL 连接上进行工作的方法。

PS XMPP 服务器是openfire身份PLAIN验证机制。

0 投票
1 回答
1905 浏览

java - 运行时 JMS 服务器重新启动后发送 JMS 消息

我对 JMS 有疑问。问题是,我有一个应用程序,它正在尝试通过 JMS 发送消息,但是在 JMS 服务器重新启动后,它会在服务器停机时抛出异常。它没有重新连接。

无需重新启动 JMS 服务器就可以了,我使用的是 weblogic 10.x。

JMS配置有问题吗?

谢谢

0 投票
1 回答
1318 浏览

python - Python客户端不会重新连接到服务器

对不起我的英语,但我的软件有一些问题,我需要一些帮助。但首先,一些代码!

客户端:

服务器端:(网上找的

如果我重新启动/断开服务器,客户端不会重新连接。我使用.terminate()and.close()方法关闭了套接字。

0 投票
1 回答
894 浏览

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。

0 投票
1 回答
485 浏览

ios5 - 与两名以上玩家重新连接到 GKMatch

我正在测试一个 Game Center 游戏,特别是当玩家暂时退出(电话、后台等)时会发生什么我希望能够暂停游戏并在玩家再次活跃时重新连接。

这在两人游戏中可以正常工作,因为 match:shouldReinvitePlayer 功能会导致玩家被重新邀请,但 Apple 指定这仅适用于两人游戏。

在三人(或更多)游戏中,我在 appDelegate applicationWillEnterForeground 中处理此问题,如下所示;

发生的情况是现有的两个玩家高兴地“ping”走,当调用应用程序委托代码时(在再次活跃的玩家中)匹配不为零并且playedIDs数组中没有任何内容,但完成处理程序从未出现被调用并且再次“复活”的玩家永远不会重新连接。

我还在“实时”播放器的调试日志中发现了一个特殊的模式,显示进入后台的播放器已经多次将状态更改为“断开连接”,中间没有任何“连接”。

所以......当 GKMATCH 被推到后台然后复活时,是否可以期待它有意义。如何重新连接?可能吗?

0 投票
1 回答
3872 浏览

java - 连接到 WiFi 为什么 .disconnect() 而不是 reconnect()?

全部 - 我有一个应用程序,我希望用户能够在其中连接 WiFi 网络。我查看了这个问题,我让应用程序能够断开连接然后重新连接(换句话说,我有正确的 SSID 和密码),但他并不是我想要做的。如果尚未连接,我只想连接,如果已经连接,则不做任何事情。当我关闭 WiFi(通过设置)并运行我的应用程序时,什么也没发生。所以比我试过这个

与此相比

但是,此更改无济于事(即使 WiFi 已打开)。所以我的问题是,如果还没有打开,我怎么能打开 WiFi,如果已经打开,什么也不做(我知道我必须使用 if 语句,所以我只是在寻找 WiFi 特定的代码)?谢谢你的时间!