Socket.io无法向Chrome上的节点服务器发送消息。火狐

时间:2012-04-10 07:26:01

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

我正试图弄清楚我的代码/设置有什么问题。基本上我想从客户端向服务器发送消息。以下适用于所有浏览器 FF(11)和chrome(18.0.1025.152 m)之外。

以下是一些信息:

  1. 我在Windows 7企业版64位计算机上运行Node.js
  2. 我使用apache从localhost
  3. 提供页面
  4. 我正在使用socket.io
  5. 侦听端口8080
  6. 看起来像chrome和FF回退到xhr-polling / jsonp-polling而不是使用套接字
  7. 我可以从服务器推送消息,但我无法从客户端发出消息
  8. 服务器代码:

    var io = require('C:/Users/shlomis/node_modules/socket.io/lib/socket.io').listen(8080);
    
    io.sockets.on('connection', function (socket) {
        socket.on('my event', function (msg) {
            console.log("DATA!!!");
        });
    });
    

    我找不到没有完整路径的方法

    客户代码:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <title>Hello World!</title>
        <meta charset="utf-8">
    
        <script src="http://localhost:8080/socket.io/socket.io.js"></script>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                var socket = io.connect('http://localhost:8080');
                $("#button").click(function() {
                    socket.emit('my event' ,"Hello World!");
                })
            })
        </script>
    </head>
    
    <body>
    <button type="button" id='button'>Send Message</button>
    </body>
    
    </html>
    

    模块版本:

    C:\Users\shlomis>npm ls
    mukhin_chat@0.0.1 C:\Users\shlomis
    ├─┬ express@2.5.9
    │ ├─┬ connect@1.8.6
    │ │ └── formidable@1.0.9
    │ ├── mime@1.2.4
    │ ├── mkdirp@0.3.0
    │ └── qs@0.4.2
    └─┬ socket.io@0.9.5
      ├── policyfile@0.0.4
      ├── redis@0.6.7
      └─┬ socket.io-client@0.9.5
        ├─┬ active-x-obfuscator@0.0.1
        │ └── zeparser@0.0.5
        ├── uglify-js@1.2.5
        ├─┬ ws@0.4.12
        │ ├── commander@0.5.2
        │ └── options@0.0.3
        └── xmlhttprequest@1.2.2
    

    节点日志:

    C:\Users\shlomis>node C:\dev\wamp\www\AR\js\videoServer.js
       info  - socket.io started
       debug - served static content /socket.io.js
       debug - client authorized
       info  - handshake authorized 17502185141066845391
       debug - setting request GET /socket.io/1/websocket/17502185141066845391
       debug - set heartbeat interval for client 17502185141066845391
       debug - client authorized for
       debug - websocket writing 1::
       debug - setting request GET /socket.io/1/xhr-polling/17502185141066845391?t=1334041653716
       debug - setting poll timeout
       debug - discarding transport
       debug - cleared heartbeat interval for client 17502185141066845391
    

    chrome WS request(101 Switching Protocols): enter image description here

    chrome XHR请求: enter image description here

    更新:我已添加

    socket.on('connect', function () {
         console.log("connected");
    });
    

    它永远不会在镀铬上闪现。

    那可能是什么错?请帮忙:))

1 个答案:

答案 0 :(得分:0)

我相信你正在为客户端使用错误的socket.io.js文件?

https://github.com/LearnBoost/socket.io-client/tree/master/dist

你应该在你有客户端的文件夹中使用这些文件,即: ../js/socket.io.min.js

关于需求问题,您使用的是npm吗?进入nodeJS项目文件夹并运行以下命令:

npm install socket.io

这应安装到项目文件夹中的node_modules文件夹中,通过执行require('socket.io');,您应该可以访问该模块。

如果这不起作用,则可能是节点安装损坏。

PS:你是否使用相同的文件端口?你似乎在端口8080上寻找socket.io文件,然后在端口8080上连接到nodeJS以进行套接字连接......

尝试使用其他端口?