A pub-sub system for node.js and redis
npm install net-pubsub
-
HTTP REST 支持
-
支持Socket 长链接 ; 支持Socket回调机制
-
Redis 存储
各种模式示例
var pubsub = require('pubsub');
var client = pubsub.Client({
redis: 'redis://localhost:6379/0'
});
var productChan = client.Channel('product');
productChan.sub('add', function (product) {
console.log(['sub', 'add', 'product', product]);
});
productChan.pub('add', {name: 'test product name'});
var pubsub = require('../index');
var client = pubsub.Client({
redis: 'redis://localhost:6379/0'
});
var app = client.http();
var i = 0;
app.channel('product').sub('add', function (product) {
app.response('product', 'add', {'add': 'success' + ++i});
});
var port = 8080;
app.listen(port, function (err) {
if (!err) {
console.log('pubsub listen on ' + port);
}
else {
console.log('Start http server failed' + err);
}
});
var pubsub = require('../index');
var client = pubsub.Client({
redis: 'redis://localhost:6379/0'
});
var server = client.socket(3230, '127.0.0.1');
server.connect(function (socket) {
var productChannel = server.channel(socket, 'product');
productChannel.sub('add', function (product) {
// TODO with product
product['id'] = 10;
productChannel.tell('add', product);
});
});
server.start(function (err){
console.log('socket listen on 3230');
});
var pubsub_client = require('../client/socket')(3230);
pubsub_client.connect(function (socket) {
var channel = pubsub_client.channel('product');
channel.pub('add', {name: 'test product'}, function (res) {
if (res['status'] == 'success') {
console.log('pub success');
}
});
channel.sub('add_success', function (res) {
console.log(['add_success', res]);
});
});
var pubsub_client = require('../client/socket')(3230);
pubsub_client.connect(function (socket) {
var channel = pubsub_client.channel('product');
channel.sub('add', function (res) {
res['id'] = 1;
channel.pub('add_success', res, function (res) {
if (res['status'] == 'success') {
console.log('pub add_success success');
}
});
});
});
传递redis_uri 参数启动pubsub客户端实例
开启channel_name隧道 返回隧道实例
订阅event事件. cb 为事件处理函数
发布data数据到 event事件中
http 返回 express 的app实例. 但增加如下方法
创建 HTTP Channel。 返回channel实例和 Client.Channel() 一致
HTTP 响应订阅事件处理结果. 该结果会被保存到redis中, 等待用户主动查询处理结果.
配置服务端监听端口 监听地址, 返回socket server 实例
服务端配置客户端连接回调函数,当有新的客户端连接后 调用此回调函数
服务端在socket监听器商订阅channelName 隧道的Event 事件,事件触发后写输入到socket 通知客户端
服务端在客户端socket的channelName隧道触发Event事件
创建服务端隧道实例
返回事件event处理结果
订阅event 事件,事件达到后调用cb 处理函数
服务端开始监听客户端, 完成后调用回调函数
在端口port和ip地址address建立socket 链接
开启channel_name隧道 返回隧道实例
在socket服务端发布event事件
从socket服务端订阅event事件
-
HTTP REST 模式需要区分不同用户的事件发布和事件处理 避免不同用户互相覆盖处理结果
-
Socket 模式断开后自动重连
-
增加日志处理
-
更多细节处理和状态检测