架构查询..使用Node.js构建服务/消息总线

所以情况是我有各种各样的数据源提供来自外部设备的消息流..一些是通过串口发送消息,一些是通过UDP发送,一些是通过Telnet发送..我希望构建一个小的Node.js从每个来源接收消息的系统。大约20个来源全部上升。 我有很多地方可以将这些消息转发给我,我希望允许客户端通过telnet连接并接收这些消息。 我想你可以称之为“服务总线”或“消息总线”。 目前我只是在探讨如何构建它的想法,我不想要一个巨大的node.js文件来完成所有事情。 我希望每个“接收器”都在我的主node.js文件中的外部.js文件中。我的方法是否正常,我可以对我的方法做出任何改进。 主Node.js文件 拉入两个“接收器”..这些接收器中的每一个都将处理来自数据源的传入消息
var sys = require("sys");

AVLReceiver = require("./avlreceiver.js").AVLReceiver();
PagerReceiver = require("./pagerreceiver.js").PagerReceiver();
pagerreceiver.js - 示例消息接收器 从串口接收消息..
var serialport = require("serialport");
var sys = require("sys");

var PagerReceiver = {};

PagerReceiver.initializePort = function () {
    this.serialport = new serialport.SerialPort("/dev/ttyS0", { 
        parser: serialport.parsers.readline("n"), baudrate: 57600 
      });

    this.serialport.on("data", this.processMessage);
};

PagerReceiver.processMessage = function (data) {
  //deal with the message
};

PagerReceiver.initializePort();

exports.PagerReceiver = function() {
       return PagerReceiver;
};
这是打破node.js系统的合适方法吗?任何关于javascript的评论也非常感谢..对于我应该考虑在node.js中构建消息总线的任何其他架构方法的任何评论都是超级的。 谢谢阅读, 邓肯。     
已邀请:
这是一个较老的问题,所以你可能已经构建了你的解决方案,但我会添加我的看法,以防万一它对某人有用。 保持接收器特定代码隔离的想法对我来说似乎是正确的,它将使读者明白哪些代码与主工作流程相关,哪些代码与特定流相关。 我也很想尝试; 如果可能的话,为所有接收器提供相同的接口,以便主代码很简单。 也许使用EventEmitters来触发可以被更高级别的应用程序代码捕获的事件 对每个应用程序或每个环境的配置文件进行外部配置,例如串行端口和波特率。节点的模块系统自动检查“〜/ node_modules”,这样您就可以在其中放置每个环境的配置,以避免在部署新代码时进行覆盖。 我很想看一下模块导出其功能的方式,见下文。 实例化 我发现你处理对象创建的方式有点误导,因为它使exports.PagerReceiver()看起来像一个类构造函数,它不是;在这种情况下,它返回一个单例对象。模块本身已经是一个单例实例,因此这有点多余,可能会产生误导。 下面是一个如何对require()的多次调用实际引用相同的私有变量i的示例。 counter.js
var i = 0;

exports.iterate = function(){
    return i++;
};
test.js
var counter1 = require('./counter');
var counter2 = require('./counter');
console.log(counter1.iterate());
console.log(counter2.iterate());
console.log(counter1.iterate());
console.log(counter2.iterate());
输出:
0
1
2
3
以下代码更简单,功能相同,除了使用require()而不是require()调用.PagerReceiver():
var serialport = require("serialport");
var sys = require("sys");

exports.processMessage = function (data) {
    //deal with the message
};

var port = new serialport.SerialPort("/dev/ttyS0", { 
    parser: serialport.parsers.readline("n"), baudrate: 57600 
});

port.on("data", exports.processMessage);
    

要回复问题请先登录注册