【问题标题】:Nodejs & websocketsNode Js 和 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 标志。呵呵!

【问题讨论】:

    标签: node.js websocket


    【解决方案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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 2021-10-29
      • 2016-02-08
      • 1970-01-01
      • 2018-06-13
      • 2019-05-21
      相关资源
      最近更新 更多