Nodejs&的WebSockets

时间:2010-08-02 16:19:18

标签: node.js websocket

我正在尝试将数据从我的浏览器(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”事件。我也在socket对象上发送数据,服务器上没有任何内容......完全难倒。现在看一下使用node-websocket-server(http://github.com/miksago/node-websocket-server)。

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

使用--recursive标志。卫生署!

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

此代码适用于我:

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();

也许显式端口参数对你的情况有帮助吗?