【问题标题】:Can't emit event from Express route in socket.io无法从 socket.io 中的 Express 路由发出事件
【发布时间】:2015-09-07 17:42:10
【问题描述】:

我已经在我的集群 express (4.11) 应用程序中设置了 socket.io (1.3.5) 并且可以正常工作(在我的主 app.js 文件中)

io.on('connection', function (socket) {
    io.emit('message', 'ja');
});

这,控制台在浏览器中注销并且工作正常。这是我想做的:

我想在服务器端执行操作时发出一条消息,以通知用户有新内容可看。

我将 io 对象传递给我的路由模块,以便我可以在我的路由中访问它。

当我尝试这个时:

router.post('/entries.json',(req, res, next) => {
    io.emit('message', 'nein')
});

我没有收到任何错误,它只是默默地失败。我觉得它是我没有看到的相当基本的东西。我可以做些什么来完成这项工作?

【问题讨论】:

  • 你在哪个端口上运行?当启动你的 node.js 应用程序时,你能看到它在正确的端口上监听吗(见最后的 ref)? - cyberciti.biz/faq/…
  • 我认为你必须在连接的套接字对象上发出:socket.emit。见文档:socket.io/docs
  • 一个长镜头,但是您是否尝试过将io.emit 包装在io.on('connection', ..) 侦听器中的路由处理程序中?

标签: javascript node.js express socket.io socket.io-1.0


【解决方案1】:

你调用了错误的方法,试试这个:

io.sockets.emit('message', 'nein');

【讨论】:

  • 不,不需要那个
【解决方案2】:

它应该可以正常工作,这很奇怪,我创建了一个可以正常工作的示例,您可以在其中看到我如何使用 io.emit 方法向所有连接的套接字发送消息:

var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);

app.get('/', function(req, res) {
    // you can use io.sockets.emit or io.emit, it is the same.                                                                
    io.emit('message', 'there is something new');
    res.end();
});

io.on('connection', function(socket) {
    console.log('new connection');
});

server.listen(4040, function() {
    console.log('server up and running at 4040 port');
});

【讨论】:

    【解决方案3】:

    原来我必须使用socket.io emitter,我不确定这是否与我也使用集群的事实有关,但它现在可以工作了!

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 2016-09-20
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 2015-04-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多