Node Js 和 websockets

Posted

技术标签:

【中文标题】Node Js 和 websockets【英文标题】:Nodejs & websockets 【发布时间】:2011-03-24 07:25:57 【问题描述】:

我正在尝试将数据从我的浏览器 (Chrome) 推送到 nodejs 服务器,但遇到了可怕的麻烦。

基本上,我已经在浏览器中看到了这段代码:

<script src="./Socket.IO/socket.io.js"></script>
<script>
        io.setPath('./Socket.IO/');

        var socket=new io.Socket('xxx.xxx.xxx.xxx');

        socket.on('connect',function()
                alert('connect');       
        );
        socket.on('message',function(msg)
                alert('message'+msg);
        );
        socket.on('close',function()
                alert('close');
        );
        socket.on('disconnect',function()
                alert('disconnect');
        );
        socket.connect();

</script>

唯一出现的警报是“关闭”警报。

这是我的服务器代码:

var http=require('http');
var io=require('./Socket.IO-node');

var server=http.createServer(function(req, res)
    // your normal server code
    res.writeHeader(200, 'Content-Type': 'text/html');
    res.writeBody('<h1>Hello world</h1>');
    res.finish();
);

var socket=io.listen(server,transports:websocket,port:8080);

socket.on('connection',function(client)
        console.log('connection');
);

您可以看到我正在尝试记录与控制台的连接,但没有任何显示。我一直在谷歌搜索并尝试通过http://github.com/LearnBoost/Socket.IO-node 的 Socket.IO 示例工作,但似乎没有什么对我有用...

非常感谢任何指针。

编辑: 你好,

我现在有以下服务器代码:

var http=require('http');
var io=require('./Socket.IO-node');

var server=http.createServer(function(req, res)
        //your normal server code
        res.writeHead(200, 'Content-Type': 'text/html');
        res.write('Hello world');
        res.end();
);

server.listen(8124);
server=io.listen(server);
server.on('connection', function(client)
        console.log('EOH connected');
        sys.log('EOH connected');
);
server.on('clientConnect',function(client)
        console.log('EOH connected');
        sys.log('EOH connected');
);
server.on('clientDisconnect',function(client)
        console.log('EOH disconnected');
        sys.log('EOH disconnected');
);

以及以下客户端代码:

<script>
window.onload=function()
io.setPath('./Socket.IO/');
socket = new io.Socket('localhost', 'port': 8124);
socket.connect();
socket.send('xxx');

</script>

当我在 localhost:8124 加载客户端代码时,我预计会触发某种“clientConnect”事件。我还在套接字对象上发送数据,但服务器上什么也没有出现……完全难住了。现在正在考虑使用 node-websocket-server (http://github.com/miksago/node-websocket-server)。

解决方案:git clone git://github.com/LearnBoost/Socket.IO.git --recursive

使用 --recursive 标志。呵呵!

【问题讨论】:

【参考方案1】:

这段代码对我有用:

var server = http.createServer(...);    

server.listen(8124);
server = io.listen(server);
server.on('connection', function(client)
    sys.log('client connected');
);

然后在客户端:

io.setPath('/media/js/Socket.IO/');
socket = new io.Socket('localhost', 'port': 8124);
socket.connect();

也许显式端口参数会对您的情况有所帮助?

【讨论】:

嘿,谢谢。我尝试了您提供的代码,但在服务器端控制台上没有收到任何消息;( 您的节点实例是否有足够的权限来打开端口?也许这是示例不起作用的原因。你可以试试 sudo node server.js 另外,你 hello-world 工作吗?访问localhost:8124 - 如果没有“hello world”,那么问题出在应用程序的服务器部分 - 使用基本的 node.js 部署。如果是这样,请先尝试让它在没有 Socket.IO 的情况下运行。还要检查浏览器中的错误控制台:如果其他一些js失败了,那么connect方法可能不会被执行。 socket.io 中也可能缺少某些文件。他们现在在 github 下载中丢失了。尝试执行 git checkout: git clone git://github.com/LearnBoost/Socket.IO.git --recursive 而不是下载 zip 存档。【参考方案2】:

这是一个 Chrome 问题:Node.js, WebSocket Location Issue?

【讨论】:

以上是关于Node Js 和 websockets的主要内容,如果未能解决你的问题,请参考以下文章

Node.js的线程和进程

Node.js的线程和进程

Node.js 中的模块和包之间的区别?

结合node.js和Python

jQuery 和 Node.js 有啥区别? [关闭]

Node.js初识