Google Chrome是否支持socket.io?

时间:2011-09-08 18:35:15

标签: javascript google-chrome node.js websocket socket.io

我正在笔记本电脑上使用node.js和socket.io制作小型多人游戏。偶尔,当我想测试一些多人游戏功能时,我使用我的PC登录游戏(PC和笔记本电脑连接到LAN网络)。 Socket.io连接到我的路由器的IP(196. ...)和端口8080.一切都运行良好,直到今天,当我只是想在我改变任何东西之前看看它是如何工作的 - 突然间它没有。我首先在笔记本电脑上打开谷歌浏览器并登录,运行正常。然后,我在我的电脑上打开谷歌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.");
                 }
            });
          }

当我调用函数时,没有任何反应。我注意到服务器记录的消息类似于:

  

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

但xhr-polling比websocket更常见。这就是我现在所知道的,而且,Firefox上的一切正常,所以我认为这是谷歌Chrome的一个问题。

当我尝试从PC登录时

服务器日志:

  

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

1 个答案:

答案 0 :(得分: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 

你可以看到socket.io@0.7.9已经过时了。这也意味着它没有最新的ws:// websocket协议更新。

所以为了解决它,只需运行:

$> npm update socket.io express