- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试找出一种方法,让我的 SockJS 客户端在服务器出现故障时重新连接到服务器。
我目前有这个:
new_conn = function() {
socket = new SockJS(protocol + serverDomain + '/echo', null, {
'protocols_whitelist': ['websocket', 'xdr-streaming', 'xhr-streaming', 'iframe-eventsource', 'iframe-htmlfile', 'xdr-polling', 'xhr-polling', 'iframe-xhr-polling', 'jsonp-polling']
});
};
socket.onopen = function () {
clearInterval(recInterval);
};
socket.onclose = function () {
recInterval = window.setInterval(function () {
new_conn();
}, 2000);
};
问题是即使在成功重新连接后 setInterval
仍会触发。似乎 socket.onopen
永远不会被执行。
知道我可能做错了什么吗?
最佳答案
我认为这可能与变量作用域有关。试试这个:
var recInterval = null;
new_conn = function() {
socket = new SockJS(protocol + serverDomain + '/echo', null, {
'protocols_whitelist': ['websocket', 'xdr-streaming', 'xhr-streaming', 'iframe-eventsource', 'iframe-htmlfile', 'xdr-polling', 'xhr-polling', 'iframe-xhr-polling', 'jsonp-polling']
});
};
socket.onopen = function () {
clearInterval(recInterval);
};
socket.onclose = function () {
recInterval = window.setInterval(function () {
new_conn();
}, 2000);
};
无论如何,这很奇怪,因为您在 window
对象上声明了 recInterval
,它应该有效。如果它不起作用,您还可以使用浏览器调试它,使用 debugger;
语句或通过设置本地断点以交互方式...(例如,在 onopen
中) .
顺便说一句,我像这样重写了整个代码(我喜欢重构:):
var recInterval = null;
var socket = null;
var new_conn = function() {
socket = new SockJS(protocol + serverDomain + '/echo', null, {
'protocols_whitelist': ['websocket', 'xdr-streaming', 'xhr-streaming',
'iframe-eventsource', 'iframe-htmlfile',
'xdr-polling', 'xhr-polling', 'iframe-xhr-polling',
'jsonp-polling']
});
socket.onopen = function () {
clearInterval(recInterval);
};
socket.onclose = function () {
recInterval = setInterval(function () {
new_conn();
}, 2000);
};
};
关于javascript - SockJS 客户端自动重新连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18930786/
目前,我的客户端连接在我刷新页面时打开,在我关闭/刷新选项卡时关闭。 我知道我可以从服务器端关闭连接,但我在文档中找不到从客户端关闭连接的方法。 我希望能够在单击一个按钮时打开一个新连接,并在单击另一
我一直在检查两个类似的解决方案,以使用独立的 Python 服务器通过 sockJS 支持网络套接字,到目前为止,我找到了两个解决方案。 我需要编写一个复杂的、可扩展的基于 web socket 的
我正在尝试从 sockjs-client 库中导入 SockJS。我正在使用 Aurelia 和 typescript ,但在尝试使用 导入时 import { SockJS } from 'sock
我将 https://github.com/mrjoes/sockjs-tornado 用于 Django 应用程序。我可以很容易地从 javascript 控制台发送消息。但我想在 Django 中
我正在关注这个 tutorial此刻,我到了必须在我的 Angular5 组件中实例化我的 SockJS-Client 的地方。 这是我所做的: 我执行以下命令来安装所需的库: npm install
我正在尝试设置一个简单的 html/Js 页面。 我已经安装了 webpack 和 babel。我已经使用“build”和“start”脚本配置了 package.json 文件。 该页面运行良好,但
我正在使用 SocketJS 和 Stomp 通过后端 api 发送文件以进行处理。 我的问题是,如果同时完成两个以上的上传,上传功能就会卡住。 前任: 用户 1 -> 上传文件 -> 后端正确接收文
我想让用户创建并加入“房间”,以便他们可以进行协作。 我正在看SockJs Multiplexer server我想知道我是否可以利用其中的一些来创建并广播到特定的 channel /房间。 在示例中
我正在尝试找出一种方法,让我的 SockJS 客户端在服务器出现故障时重新连接到服务器。 我目前有这个: new_conn = function() { socket =
我正在使用 Vert.x 和 SockJS 来传输封装在消息中的数据。是否有规范 SockJS/Websocket 消息可以有多大? 最佳答案 SockJS 消息的大小没有明确的限制。但不幸的是,So
我正在尝试建立从前端到 vertx 后端的 sock.js 连接。 我最初的尝试是这样的: let token = ''; let data = {'Authorization' : 'Bearer
我正在开发一个 Node.js 后端,它通过 websocket 与一些桌面客户端进行通信,而服务器端的通信是从 Web 前端发起的。一切正常,因为我将 SockJS Connection 实例存储在
我正在开发一个应用程序,它使用 SockJS 来更新连接到服务器的其他应用程序的一些通用数据。问题来了,当我尝试在两个浏览器选项卡中打开它,因为只有其中一个实现了连接,而另一个则一直等待直到超时。 谁
我想通过 Bower 获取最新的 SockJS,并将其保存到我的 bower.json 文件中。 根据GitHub sockjs-client page ,最新版本是 v1.0.3(我看到它的标签)。
有什么方法可以让 Android 与 SockJs 一起在 Phonegap 中打包的应用程序中进行套接字连接?目前我有以下代码可在 iOS 上运行但在 Android 上失败,因为 file:///
使用 node.js 和名为“echo”的 sockjs github 示例 https://github.com/sockjs/sockjs-node ,如果没有任何变化,传输将在大约 130-15
我的应用程序堆栈: 在我的服务器上运行着一个 Redis 服务器。 PHP 后端通过 Redis 服务器与 Predis 库进行通信。它将发布消息。这些消息将由我的 Redis 客户端 (node.j
我有一个网站(Java + Spring)依赖 Websockets(Stomp over Websockets 用于 Spring + RabbitMQ + SockJS)来实现某些功能。 我们正在
我有一个在 localhost:8080 上运行的 SpringBoot 服务器和本地主机上的 npm(服务于 React 应用程序):3000 每当我尝试建立到 spring 的 websocket
正在尝试连接到 SockJs server .我正在从安全的 https 页面 https://localhost/index.php 运行以下代码 var sockjs_url = 'htt
我是一名优秀的程序员,十分优秀!