所以情况是我有各种各样的数据源提供来自外部设备的消息流..一些是通过串口发送消息,一些是通过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();
Run Code Online (Sandbox Code Playgroud)
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;
};
Run Code Online (Sandbox Code Playgroud)
这是打破node.js系统的合适方法吗?任何关于javascript的评论也非常感谢..对于我应该考虑在node.js中构建消息总线的任何其他架构方法的任何评论都是超级的.
谢谢阅读,
邓肯.
我有一些关于我的猫鼬模型的信息是瞬态的.出于性能原因,我不希望将其存储在模型中..但我确实希望能够将这些信息提供给连接到我的服务器并要求它的客户端.
这是一个简单的例子:
var mongoose = require('mongoose'),
db = require('./dbconn').dbconn;
var PersonSchema = new mongoose.Schema({
name : String,
age : Number,
});
var Person = db.model('Person', PersonSchema);
var fred = new Person({ name: 'fred', age: 100 });
Run Code Online (Sandbox Code Playgroud)
Person模式有两个我想要存储的属性(名称和年龄)..这有效..我们在控制台中看到:
console.log(fred);
Run Code Online (Sandbox Code Playgroud)
{name:'fred',年龄:100,_id:509edc9d8aafee8672000001}
但我确实有一个属性("状态")快速更改,我不想将其存储在数据库中..但我确实想要动态跟踪它并将其提供给客户端,因此我将其作为键添加到实例中/对.
fred.status = "alive";
Run Code Online (Sandbox Code Playgroud)
如果我们看一下弗雷德加入了"活着"键/值对后,在控制台再次,我们再次看到弗雷德,但他表示未启用状态:
{name:'fred',年龄:100,_id:509edc9d8aafee8672000001}
然而,键/值对肯定存在..我们看到:
console.log(fred.status);
Run Code Online (Sandbox Code Playgroud)
呈现:
活
我发送给客户的对象的JSON表示也是如此."状态"不包括在内.
我不明白为什么..有人可以帮忙吗?
或者,是否有更好的方法将属性添加到未持久保存到数据库的mongoose模式?
我正在使用 Node 的内置数据报 UDP 套接字进行简单的 UDP“发送”:
http://nodejs.org/docs/v0.3.1/api/dgram.html
消息的目的地是一个域名,在传输之前必须由 DNS 解析。node.js 处理这个问题。
如果 DNS 解析失败,dgram 会抛出“ENOTFOUND Domain Not Found”错误并将其传递给我注册的回调。
我的代码是这样的:
client = dgram.createSocket("udp4");
client.send(message,
0,
message.length,
this.port,
this.address,
function(err, bytes) {
if (err) {
//get rid of error??
}
}
);
client.close();
Run Code Online (Sandbox Code Playgroud)
我对这个错误不是特别感兴趣。如果它失败了,它就失败了,它对应用程序的业务规则并不重要。为了完整性,我会将其记录到控制台。但是我无法阻止此异常返回堆栈并关闭应用程序。我该如何处理这个错误?
我不想为此设置一个全局的未处理异常处理程序。我尝试在 Try/Except 处理程序中的回调中重新抛出错误......但这不起作用。
有什么想法吗?
谢谢阅读。