NodeJS、websocket 和 module.export
NodeJS, websocket, and module.export
我有一个 server.js 文件。
在里面,我定义了我的路线。
// routes
var mainRoutes = require('./routes/main.js')(app, express);
var apiRoutes = require('./routes/api.js')(app, express);
var socketRoutes = require('./routes/socket.js');
app.use('/', mainRoutes);
app.use('/api', apiRoutes);
// socket.io communication
io.sockets.on('connection', socketRoutes);
我的 socket.js 文件看起来像这样:
module.exports = function (socket) {
console.log('user connected');
socket.on('myEvent', function(data) {
// whatever ...
});
}
在这个函数中,我可以捕获事件并发送一些。
但是我需要在某个时候向所有人发送消息。假设我收到 'myEvent' 事件。
基本上,我想做的是:
io.sockets.emit('messageForEveryone', "This is a test");
但是在这里,我只能处理 'socket' 的论点,我猜这只适用于 1 个人。
我想将 io 从 server.js 传递到 socket.js。
我试过了(在 server.js 中):
var socketRoutes = require('./routes/socket.js', io);
那(在 socket.js 中):
module.exports = function (io, socket)
显然,它不起作用。我什至不明白套接字参数是从哪里来的。
问题:当我在 sockets.js 文件的 module.export 中时,如何处理 io 对象?
非常感谢任何帮助,我是新手。
谢谢!
因为您只想发送给所有客户端,而不是将 io
传递给 socketRoutes
,您可以简单地这样做。
module.exports = function (socket) {
var sockets = this;
console.log('user connected');
socket.on('myEvent', function(data) {
sockets.emit('hello_all_clients',data);
});
}
您可以 return 导出函数。
module.exports = function (io) { // pass io to initialize
return function (socket) {
// io and socket are both scoped
}
}
然后在 server.js
// socket.io communication
io.sockets.on('connection', socketRoutes(io));
我有一个 server.js 文件。
在里面,我定义了我的路线。
// routes
var mainRoutes = require('./routes/main.js')(app, express);
var apiRoutes = require('./routes/api.js')(app, express);
var socketRoutes = require('./routes/socket.js');
app.use('/', mainRoutes);
app.use('/api', apiRoutes);
// socket.io communication
io.sockets.on('connection', socketRoutes);
我的 socket.js 文件看起来像这样:
module.exports = function (socket) {
console.log('user connected');
socket.on('myEvent', function(data) {
// whatever ...
});
}
在这个函数中,我可以捕获事件并发送一些。 但是我需要在某个时候向所有人发送消息。假设我收到 'myEvent' 事件。
基本上,我想做的是:
io.sockets.emit('messageForEveryone', "This is a test");
但是在这里,我只能处理 'socket' 的论点,我猜这只适用于 1 个人。
我想将 io 从 server.js 传递到 socket.js。
我试过了(在 server.js 中):
var socketRoutes = require('./routes/socket.js', io);
那(在 socket.js 中):
module.exports = function (io, socket)
显然,它不起作用。我什至不明白套接字参数是从哪里来的。
问题:当我在 sockets.js 文件的 module.export 中时,如何处理 io 对象?
非常感谢任何帮助,我是新手。
谢谢!
因为您只想发送给所有客户端,而不是将 io
传递给 socketRoutes
,您可以简单地这样做。
module.exports = function (socket) {
var sockets = this;
console.log('user connected');
socket.on('myEvent', function(data) {
sockets.emit('hello_all_clients',data);
});
}
您可以 return 导出函数。
module.exports = function (io) { // pass io to initialize
return function (socket) {
// io and socket are both scoped
}
}
然后在 server.js
// socket.io communication
io.sockets.on('connection', socketRoutes(io));