相关疑难解决方法(0)

Websocket onerror - 如何读取错误描述?

我一直在开发基于浏览器的多人游戏一段时间,我一直在各种环境(客户办公室,公共wifi等)测试不同的端口可访问性.一切都很顺利,除了一件事:我无法弄清楚如何读取错误号.或收到onerror事件时的描述.

客户端websocket是在javascript中完成的.

例如:

// Init of websocket
websocket = new WebSocket(wsUri);
websocket.onerror = OnSocketError;
...etc...

// Handler for onerror:
function OnSocketError(ev)
{
    output("Socket error: " + ev.data);
}
Run Code Online (Sandbox Code Playgroud)

'output'只是一些写入div的实用函数.

我得到的是ev.data的'undefined'.总是.我一直在谷歌搜索,但似乎没有关于这个事件有什么参数以及如何正确阅读它的规范.

任何帮助表示赞赏!

javascript html5 websocket

66
推荐指数
2
解决办法
9万
查看次数

如何捕获`WebSocket连接到'ws:// xxx:nn'失败:连接在收到握手响应错误之前关闭?

假设我有一个以端口启动的节点服务器nn,并且没有任何WebSocket服务.

问题是我的客户端尝试将WebSocket服务连接到此服务器.

显然,它应该无法连接到服务器.

但我无法捕捉到这个错误,我的客户端代码如下:

try {
    this.ws = new WebSocket('ws://xxx:nn');
} catch ( e ) {
    fallback();
    console.warn(e);
}
Run Code Online (Sandbox Code Playgroud)

我的期望是fallback在连接失败时调用方法,但实际上我可以通过上面捕获它的错误try...catch

有谁知道如何在我的用例中捕获错误?

javascript websocket

54
推荐指数
2
解决办法
5万
查看次数

如何捕获WebSocket连接中断?

在Firefox(至少)中,如果你按ESC,它将关闭所有打开的WebSockets连接.我需要捕获断开连接并尝试重新连接一旦它再次可用.

这是我试图实现的代码的一个示例,但是我能想出的任何内容都不会捕获错误并允许我优雅地处理它.

看看代码:http://jsfiddle.net/w5aAK/

var url = "ws://echo.websocket.org";
    try {
        socket = window['MozWebSocket'] ? new MozWebSocket(url) : new WebSocket(url);
        socket.onopen = function(){
            console.log('Socket is now open.');
        };
        socket.onerror = function (error) {
            console.error('There was an un-identified Web Socket error');
        };
        socket.onmessage = function (message) {
            console.info("Message: %o", message.data);
        };
    } catch (e) {
        console.error('Sorry, the web socket at "%s" is un-available', url);
    }

setTimeout(function(){
    socket.send("Hello World");
}, 1000);
Run Code Online (Sandbox Code Playgroud)

打开控制台并观察输出.

我在这里做错了,还是因为连接在JS脚本范围之外运行而不可能?

任何输入都会有所帮助.

谢谢!

javascript websocket

11
推荐指数
1
解决办法
2万
查看次数

禁止"与'xyz'的WebSocket连接失败"

我编写了一个使用Web套接字的Web应用程序.这个想法是我的应用程序在启动时尝试自动连接到最近连接到主机.如果它无法建立与其中任何一个的连接,则它会将用户定向到连接部分并要求他们手动建立连接.

所有这一切都有效.总之,我按顺序尝试每个已知主机,如果200ms后它没有连接(`readyState!= 1),它会尝试下一个.所有这些主机应该在局域网上,所以200ms工作非常可靠.如果列表中的最后一个也失败,那么Web将打开一个模式,指示用户手动键入主机.

问题是,通过尝试自动连接,我必须为我尝试过的主机创建websockets,它会向控制台输出如下所示的错误消息:

与'ws:// lightmate:8080 /'的WebSocket连接失败:连接建立错误:net :: ERR_NAME_NOT_RESOLVED

与'ws:// localhost:8080 /'的WebSocket连接失败:连接建立错误:net :: ERR_CONNECTION_REFUSED

虽然不是任何方式致命的缺陷,但这是不雅观的,妨碍了我的调试.

我试图通过new WebSocket(address)使用try/catch块包围调用来删除它,并且错误仍然通过,我也尝试设置一个onerror处理程序,希望这会抑制错误消息.什么都没有用.

connect: function(){
  var fulladdr = completeServerAddress(address);
  try {
    connection = new WebSocket(fulladdr);
    connection.suppressErrorsBecauseOfAutoConnection = suppressErrorsBecauseOfAutoConnection; //Store this module-scoped variable in connection, so if the module changes suppression state, this connection won't.
  } catch (e){
    //Make sure we don't try to send anything down this dead websocket
    connection = false;
    return false;
  }
  connection.binaryType = "arraybuffer";
  connection.onerror = function(){
    if …
Run Code Online (Sandbox Code Playgroud)

javascript error-suppression websocket

9
推荐指数
1
解决办法
1763
查看次数

检查 WebSocket 服务器是否可用而不会出错

我的网络应用程序需要定期检查服务器是否已启动。这允许用户以任一顺序启动服务器和客户端。

为此,我只是WebSocketsetTimeout处理程序内部调用构造函数。

从使用的角度来看,这种策略效果很好,但对我开发人员来说很烦人,因为我在 Chrome 中看到很多控制台错误:

remote.html:194 WebSocket connection to 'ws://localhost:8082/' failed: Connection closed before receiving a handshake response
remote.html:194 WebSocket connection to 'ws://localhost:8082/' failed: Connection closed before receiving a handshake response
remote.html:194 WebSocket connection to 'ws://localhost:8082/' failed: Connection closed before receiving a handshake response
Run Code Online (Sandbox Code Playgroud)

这些并不是真正的错误,因为我的 Web 应用程序在服务器不可用的情况下完全没问题。它重复调用WebSocket构造函数(MDN)只是为了检查服务器是否已经启动。

有一个更好的方法吗?对于上下文,我的 Web 应用程序是在设备上运行的本机 C++ 应用程序的“远程控制”。

javascript browser websocket

3
推荐指数
1
解决办法
220
查看次数