【问题标题】:NodeJS + socket.io: Server not recieving emitted messagesNodeJS + socket.io:服务器没有收到发出的消息
【发布时间】:2014-05-04 18:30:25
【问题描述】:

我正在使用 NodeJS 和 socket.io(和 Express)建立一个简单的项目。我的 app.js 看起来像:

var express = require("express");
var app = express();
var port = 8003;
var __root = '/voidwalker/';
console.log('Listening on port: ' + port);

// Settings //
app.set('views', __dirname + '/tpl');
app.set('view engine', "jade");
app.engine('jade', require('jade').__express);
app.use(__root, express.static(__dirname + '/public'));

// Pages //
app.get(__root, function(req, res) {
    res.render('voidwalker');
});

// Socket.io //
var io = require('socket.io').listen(app.listen(port));
io.sockets.on('connection', function (socket) {
    socket.emit('message', {message: 'Welcome to the chat!'});
    socket.on('send', function(data) {
        console.log('TEST', data);
        io.sockets.emit('message', data);
    });
});

我的客户端 js 看起来像:

window.onload = function() {
    var socket = io.connect('http://node.domain.com:8003/voidwalker/');
    if ( settings.debug ) console.debug('Loaded socket.io', socket);

    socket.on('message', function (data) {
        console.log('data recieved')
        console.log(data);
    });

    console.log(socket.emit('send', {'test': 'io.sockets.emit'}));
}

但它似乎根本不起作用。这是连接单个客户端后的日志副本:

[webadmin@server ~]$ node /var/www/node/apps/voidwalker/app.js
Listening on port: 8003
   info  - socket.io started
   debug - client authorized
   info  - handshake authorized 4F7Zocz71RaQv7w5WOVg
   debug - setting request GET /socket.io/1/websocket/4F7Zocz71RaQv7w5WOVg
   debug - set heartbeat interval for client 4F7Zocz71RaQv7w5WOVg
   debug - client authorized for
   debug - websocket writing 1::
   debug - websocket writing 5:::{"name":"message","args":[{"message":"Welcome to the chat!"}]}

我的开发者控制台返回这个:

Loaded socket.io: SocketNamespace {socket: Socket, name: "/voidwalker/", flags: Object, json: Flag, ackPackets: 0…}

当客户端连接时,我希望在我的 CLI 中看到 console.log('TEST', data); 的返回值,但它从未出现。

【问题讨论】:

  • 浏览器控制台有错误信息吗?浏览器中的调试输出是什么?您已经添加了一些语句来跟踪浏览器端发生的事情,因此请与我们分享。
  • 我添加了开发者控制台的内容;)没有错误消息。

标签: node.js sockets socket.io


【解决方案1】:

你确定

var socket = io.connect('http://node.domain.com:8003/voidwalker/');

?

只是因为您将一些中间件绑定到此路径,我不希望 socket.io 也在那里侦听。实际上它的default endpoint is /socket.io(参见endpoint 选项)不适合您尝试连接的端点。我会给

var socket = io.connect('http://node.domain.com:8003/');

试一试。客户端使用socket.io as default endpoint,所以这应该可以放在一起。

【讨论】:

  • 它似乎奏效了!问题是整个项目位于我的根目录(/voidwalker)的子目录中,所以我认为我必须指定它。
猜你喜欢
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 2017-01-07
  • 2013-11-12
  • 1970-01-01
  • 2016-04-26
  • 2020-10-19
  • 2020-12-25
相关资源
最近更新 更多