与通过socket.io更新客户端的模块共享服务器端口

时间:2015-02-14 20:04:10

标签: node.js

我正在实现一个节点服务器,除服务页面外,它还包含一组子模块,用于通过socket.io报告数据。每个模块都独立于核心服务器 - 每个模块都有一个计时器,它处理一些数据并将结果发送回Web客户端。但是由于代码/模块的结构,我遇到了与服务器端口连接如何使用/共享有关的问题,并且想知道是否有关于如何做到这一点的推荐模式?

服务器有一个非常基本的设置,然后需要模块:

var app = require('http').createServer(handler);
app.listen(8888);
function handler (req,res) { ... }

// Here's where the sub-processing happens
var module1 = require('./module1.js');
var module2 = require('./module2.js');
...    
var moduleN = require('./moduleN.js');

然后每个模块具有以下结构:

// Socket stuff
var io = require('socket.io').listen(port);// Not sure how to share server port???
io.sockets.on('connection', onConnect);
function onConnect(socket) { ... }

function sendUpdateToClients(type,data) {
    io.sockets.emit(type,data);
}

// Timed stuff
setInterval(someProcessing,someInterval);
function someProcessing() {
    ... // process some data here
    sendUpdateToClients(type,data);// Emit the data to clients
}

我目前将此代码与我的MEAN应用程序分开运行,同时我尝试最好地了解如何组织代码。

我想我的问题是: - 组织子模块更新模块的最佳实践是什么? - 我应该将套接字引用从服务器传递到每个模块吗?如果是这样,最好如何做到这一点? - 或者我应该从模块返回一些东西回到服务器,所以它进行更新?如果是这样,最好如何做到这一点? - 每个模块是否应使用自己的端口,与服务器端口分开? - 或者整个代码组织是否很糟糕并且有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以将模块导出为函数。

//module1.js
module.exports = function(port){
var io = require('socket.io').listen(port);// Not sure how to share server port???
io.sockets.on('connection', onConnect);
function onConnect(socket) { ... }

function sendUpdateToClients(type,data) {
    io.sockets.emit(type,data);
}

// Timed stuff
setInterval(someProcessing,someInterval);
function someProcessing() {
    ... // process some data here
    sendUpdateToClients(type,data);// Emit the data to clients
}
}

然后在你的服务器文件中。

module2.js
var module1 = require('./module1.js')(8888);