小编The*_*Spy的帖子

Chrome websockets,就绪状态始终为0

我正在尝试在网站上使用websockets,所以首先我开发了一个小而简单的websocket页面来测试它.

我有一个在我的localhost上运行的websocket服务器,它基于python Tornado"Chat"演示.由于某种原因,聊天演示应用程序运行完美,但我似乎无法使用websocket与我自己的页面,虽然有一些形式的连接.

我正在使用最新的Chromium版本测试它,因此实现了由Tornado实现支持的websockets版本13.

所以这是问题所在:

  1. 加载页面,执行js并将升级请求发送到服务器
  2. 服务器接收请求和答案

所以在我的理解中Chrome应该设置readyState = 1,我应该能够从我的页面发送消息.

只是由于某种原因它不起作用,readyState保持为0,当然如果我尝试发送消息,我收到INVALID_STATE_ERR.

以下是标题:

请求:

GET ws://127.0.0.1:8000/chatsocket HTTP/1.1
Origin: http://127.0.0.1
Cookie: _xsrf=9f73731fc2d544df864ce777bef0775a
Connection: Upgrade
Host: 127.0.0.1:8000
Sec-WebSocket-Key: pkwlpY+TtxfgUrm3M4WtTQ==
Upgrade: websocket
Sec-WebSocket-Version: 13
Run Code Online (Sandbox Code Playgroud)

响应:

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: ur9KL2jBhYB38e2SgwOkjyBlQXk=
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏:)



---编辑---


所以我最终弄清楚了,如果你遇到同样的问题,原因是:

线程结束时WebSocket的readyState更新!

所以运行如下代码:

var ws = new WebSocket(stuff);
while(ws.readyState==0){};
Run Code Online (Sandbox Code Playgroud)

将无限循环发送到浏览器...

运行代码如:

var ws=new WebSocket(stuff);
do_other_stuf();
Run Code Online (Sandbox Code Playgroud)

可能会工作,但你不能使用WS.


如果在套接字打开后应该运行的代码使用套接字,则必须编写它:

var ws=new WebSocket(stuff);
ws.onopen = new function(){
    // some code that need WS to be open
}
// rest of …
Run Code Online (Sandbox Code Playgroud)

javascript html5 google-chrome chromium websocket

7
推荐指数
1
解决办法
7614
查看次数

标签 统计

chromium ×1

google-chrome ×1

html5 ×1

javascript ×1

websocket ×1