使用 Socket.io 将套接字传递到 Node 中的模块.js
Pass Socket to Module in Node.js using Socket.io
我有一个模块
var exports = module.exports = {};
exports.refresh = function (msg) {
socket.emit('refresh', { message: msg });
}
exports.lock = function (msg) {
socket.emit('lock', { message: msg });
}
在我的服务器中.js我定义了
var io = require("socket.io").listen(server);
并调用模块
var period = require('./server/functions/period.js');
如何将套接字传递给模块(句点.js),以便我可以访问套接字方法,例如socket.emit
、broadcast
和io.sockets.emit
。
有几种方法可以解决这个问题。这取决于您希望如何使用实际模块。每个套接字只有一个实例,或每个套接字一个实例。我建议你让你的模块返回一个构造函数而不是一个对象文字,如下所示:
module.exports = function(socket) {
var socket = socket;
this.refresh = function (msg) {
socket.emit('refresh', { message: msg });
}
this.lock = function (msg) {
socket.emit('lock', { message: msg });
}
}
然后,您可以创建包含实际套接字的新对象。
var Period = require('./server/functions/period.js'),
period = new Period(socket);
一种解决方案可能是对每个连接插座执行此操作。
var periodModule = require('./server/functions/period.js'),
io.on('connection', function(socket){
var period = new periodModule(socket);
//make a call
period.refresh();
});
您还可以将 io 对象传递给模块以获取广播接口。
module.exports = function(socket, io) {
var socket = socket,
io = io;
this.broadcastSomething = function(..) {
io.emit('data', { data: 'data'});
}
this.refresh = function (msg) {
socket.emit('refresh', { message: msg });
}
this.lock = function (msg) {
socket.emit('lock', { message: msg });
}
}
相关文章:
- Node.js正在更改应用程序以使用集群模块
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 正在更改node.js模块变量
- 编写在浏览器和node.js中运行的模块化ECMAScript
- 在Node.js中使用异步模块时出现问题
- 使用Q节点模块时,Bluemix node.js应用程序部署失败
- 在测试使用承诺的 Node 模块时,您如何断言
- 在 Node 模块中导出类.exports = {}.
- Babelify和本机Node模块
- 是否有用于异步JSON解析器的Node模块不将整个JSON字符串加载到内存中
- 如何使用这些Node模块通过文件或URL接受HTML,然后输出JSON作为现有HTML元素的验证
- 将Angular2应用封装为node模块库
- 使Node模块中的变量可以被jQuery、Ember等使用
- Node模块中的Javascript性能
- 在cordova中使用node模块
- 在我的Angularjs应用中使用node模块
- 将参数传递给TypeScript编译器Node模块
- 未捕获的ReferenceError: $是未定义的错误,通过Node模块访问
- 调用node模块时,Undefined不是函数
- 如何在Node模块之间共享数组状态