如何在Express 4路由中使用socket.io向连接的套接字发出事件?

内特

这是其他人提出的问题,但是由于我使用的Express设置不同,因此我无法从给出的答案中受益。

我已经实现了socket.io并在服务器上以简单的方式工作。它是这样工作的:

bin/www

#!/usr/bin/env node
var debug = require('debug')('gokibitz');
var app = require('../../server');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
    debug('Express server listening on port ' + server.address().port);
});

var io = require('socket.io').listen(server);

io.on('connection', require('../routes/socket.js'));

我所有的路线和其他Express设置都在中../../server.js

var routes = require('./server/routes/index');
var user = require('./server/routes/user');
...

app.use('/', routes);
app.use('/api/user/', user);
...
app.use('*', routes);

然后在中../routes/socket.js,我得到了这个样板:

module.exports = function (socket) {
    socket.emit('send:news', { hello: 'world' });

    setInterval(function () {
        socket.emit('send:time', {
            time: (new Date()).toString()
        });
    }, 1000);

    return socket;
};

我可能会补充说,这工作得很漂亮。但是现在,我希望能够在我非常普通的Express应用程序中从各种路径发出事件,而我一生都无法找到正确的方法来引用所需的套接字对象。

示例:当用户发表评论时,我想向所有连接的用户发出一个事件,通知他们新评论。如何从路由文件(./server/routes/user.js)中访问需要发出事件的对象?

这是路由文件中相关位的框架:

var express = require('express');
var router = express.Router();

router.post('/', function (req, res) {
  ...
});

module.exports = router;

我唯一可以访问它的地方是../routes/socket.js文件,这没有用。

所有路由都在app.js传递任何io或socket对象之前设置在中。

我是否应该能够以require('socket.io')某种方式使用它来发出所有连接的插座?

是否有一种明智的方式来存储连接的插座,../routes/socket.js以便可以要求并从其他路径发出?

谁能指引我正确的方向?

内特

我最终可以使用以下示例使事情正常进行:https : //github.com/expressjs/generator/issues/45#issuecomment-53719435

我创建了一个新文件,名为server/io.js

var io = require('socket.io')();

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

module.exports = io;

然后我更新server/bin/www为:

#!/usr/bin/env node
var debug = require('debug')('gokibitz');
var app = require('../../server');
var io = require('../io');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
    debug('Express server listening on port ' + server.address().port);
});

io.attach(server);

然后,在我的路线中,使用以下命令:

var io = require('../io');
...
io.emit(...);

至少对我而言,缺少的部分是能够分别创建io对象,返回正确的对象,然后使用io.attach(server)Insidebin/www在正确的位置启动它的能力。

希望这会对我的足迹有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在快速路由中使用socket.io?

来自分类Dev

如何从路由文件在socket.io中发出事件?

来自分类Dev

如何在Express 4 Web应用程序的多个路由中使用单个mssql连接池?

来自分类Dev

在路由中使用socket.io

来自分类Dev

Socket.io - 如何在一段时间后自动发出事件

来自分类Dev

Express-如何在路由文件中使用io.socket.emit?

来自分类Dev

如何使用Socket.io和Node.js发出事件?

来自分类Dev

使用socket.io配置Express 4.0路由

来自分类Dev

如何基于客户端在socket.io中发出事件?

来自分类Dev

Socket.io 1.0 + Express 4.2 =无套接字连接

来自分类Dev

Socket.io 1.0 + Express 4.2 =无套接字连接

来自分类Dev

如何使用jQuery发出事件?

来自分类Dev

如何在引导程序中使用 Vue.js 发出事件?

来自分类Dev

如何在Express POST路由中使用Mongoose保存方法

来自分类Dev

在 Express 路由中使用 redis

来自分类Dev

Vue.js如何在路由器视图组件之间发出事件

来自分类Dev

如何在使用angularjs的路由中使用多视图

来自分类Dev

如何在NodeJS中的路由中使用“?param = X”?

来自分类Dev

如何在Symfony路由中使用锚点?

来自分类Dev

如何在Flask路由中使用线程

来自分类Dev

如何在路由中使用通配符重定向

来自分类Dev

如何在Laravel的路由中使用变量?

来自分类Dev

如何在 NodeJs 路由中使用请求模块

来自分类Dev

如何在套接字io中为路由中的每个ID创建一个新房间

来自分类Dev

套接字子类不发出事件

来自分类Dev

如何将所有套接字连接到Socket.io

来自分类Dev

在MVC 4路由中使用UIRouter模板

来自分类Dev

使用鼠标发出事件

来自分类Dev

Socket.io - 在服务器发出时调用了错误的客户端套接字事件

Related 相关文章

热门标签

归档