Socket.io无法向Chrome和Firefox上的节点服务器发送消息

Shl*_*rtz 5 firefox google-chrome websocket node.js socket.io

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

这是一些信息:

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

服务器代码:

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!!!");
    });
});
Run Code Online (Sandbox Code Playgroud)

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

客户代码:

<!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>
Run Code Online (Sandbox Code Playgroud)

模块版本:

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
Run Code Online (Sandbox Code Playgroud)

节点日志:

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
Run Code Online (Sandbox Code Playgroud)

chrome WS request(101 Switching Protocols): 在此输入图像描述

chrome XHR请求: 在此输入图像描述

更新:我添加了

socket.on('connect', function () {
     console.log("connected");
});
Run Code Online (Sandbox Code Playgroud)

它永远不会在镀铬上燃烧.

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

Gon*_*ira 0

我相信您为客户端使用了错误的 socket.io.js 文件?

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

您应该在存放客户端内容的文件夹中使用这些文件,即: ../js/socket.io.min.js

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

npm install socket.io

这应该安装到node_modules项目文件夹内的文件夹中,并且通过执行 arequire('socket.io');您应该能够访问该模块。

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

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

尝试使用另一个端口?