6

我现在正试图弄清楚我的代码/设置有什么问题。基本上我想从客户端向服务器发送一条消息。以下适用于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!!!");
    });
});

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

客户端代码:

<!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 请求(101 切换协议): 在此处输入图像描述

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

更新:我添加了

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

它永远不会在铬上触发。

那么有什么问题呢?请帮忙:)

4

1 回答 1

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您的项目文件夹内的文件夹中,并且通过执行require('socket.io');您应该能够访问该模块。

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

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

尝试使用另一个端口?

于 2012-05-10T09:17:51.100 回答