Google Chrome是否支持socket.io?

cor*_*zza 2 javascript google-chrome websocket node.js socket.io

我正在使用笔记本电脑上的node.js和socket.io制作小型多人游戏。有时,当我想测试某些多人游戏功能时,我会使用PC登录PC(PC和笔记本电脑已连接到LAN网络)。Socket.io连接到路由器的IP(196. ...)和端口8080。直到今天,一切正常,当我只是想看看它如何工作之后才更改任何内容-突然没有了。我首先在笔记本电脑上打开Goog​​le Chrome浏览器并登录,效果很好。然后,我在PC上打开了Google Chrome浏览器,并尝试进行连接,但该连接无法正常工作。首先,用户在表单中输入其名称和密码,然后单击登录按钮,该按钮将调用此功能:

          login = function()
          {
               var n = document.forms['logn']['name'].value;
               var p = document.forms['logn']['password'].value;              

            var socket = io.connect("http://192.168.0.13:8080");
            socket.emit("login", {n: n, p: p});

            socket.on("got", function(data){
                 if (data.good)
                 {
                      main(socket, n)
                 }
                 else
                 {
                      alert("Failed to log in.");
                 }
            });
          }
Run Code Online (Sandbox Code Playgroud)

当我调用函数get时,什么也没有发生。我注意到服务器记录类似于以下的消息:

设置请求GET /socket.io/1/websocket/

但是xhr-polling比websocket更常见。这就是我目前所知道的,而且在Firefox上一切正常,所以我认为这与Google Chrome有关。

当我尝试从PC登录时,服务器会记录日志:

调试-服务的静态/socket.io.js调试-客户端授权的
信息-握手授权的30836340583773206
调试-设置请求GET /socket.io/1/websocket/30836340583773206
调试-设置客户端的心跳间隔30836340583773206
调试-客户端授权进行
调试-设置请求GET /socket.io/1/xhr-polling/30836340583773206?t=1315509666877
调试-设置轮询超时
调试-丢弃传输
调试-清除客户端的心跳间隔30836340583773206
调试-提供服务的静态/socket.io.js

Lay*_*yke 5

我只是有完全相同的问题。

我可以握手,并通过Chrome进行身份验证,但是客户端无法正确处理所有发射(尽管Socket.io正在发送它们)。

登录到服务器并更新socket.io。

$> npm ls会告诉您已安装模块的最新版本。以我为例,我正在跑步:

/var/www/discovery/node
??? express@2.4.6 
? ??? connect@1.6.2 
? ??? mime@1.2.2 
? ??? qs@0.3.1 
??? iniparser@1.0.3 
??? jsonrpc@0.1.1 
??? jsonrpc-ws@0.0.3 
??? jsonrpc2@0.0.6 
??? mysql@0.9.3 
? ??? hashish@0.0.4 
?   ??? traverse@0.5.1 
??? socket.io@0.7.9 
  ??? policyfile@0.0.4 
  ??? redis@0.6.6 
  ??? socket.io-client@0.7.9 
    ??? uglify-js@1.0.6 
    ??? websocket-client@1.0.0 
    ??? xmlhttprequest@1.2.2 
Run Code Online (Sandbox Code Playgroud)

您会看到socket.io@0.7.9是旧的。这也意味着它没有最新的ws:// websocket协议更新。

因此,为了修复它,只需运行:

$> npm update socket.io express
Run Code Online (Sandbox Code Playgroud)