Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

20 Commits

Repository files navigation

pubsub

A pub-sub system for node.js and redis

获取和安装

npminstallnet-pubsub

特性

  • HTTP REST 支持

  • 支持Socket 长链接 ; 支持Socket回调机制

  • Redis 存储

快速上手

各种模式示例

同一进程内

varpubsub=require('pubsub');varclient=pubsub.Client({redis: 'redis://localhost:6379/0'});varproductChan=client.Channel('product');productChan.sub('add',function(product){console.log(['sub','add','product',product]);});productChan.pub('add',{name: 'test product name'});

HTTP REST 接口

varpubsub=require('../index');varclient=pubsub.Client({redis: 'redis://localhost:6379/0'});varapp=client.http();vari=0;app.channel('product').sub('add',function(product){app.response('product','add',{'add': 'success'+++i});});varport=8080;app.listen(port,function(err){if(!err){console.log('pubsub listen on '+port);}else{console.log('Start http server failed'+err);}});

Socket 模式

Server 端

varpubsub=require('../index');varclient=pubsub.Client({redis: 'redis://localhost:6379/0'});varserver=client.socket(3230,'127.0.0.1');server.connect(function(socket){varproductChannel=server.channel(socket,'product');productChannel.sub('add',function(product){// TODO with productproduct['id']=10;productChannel.tell('add',product);});});server.start(function(err){console.log('socket listen on 3230');});

客户端 pub

varpubsub_client=require('../client/socket')(3230);pubsub_client.connect(function(socket){varchannel=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]);});});

客户端sub

varpubsub_client=require('../client/socket')(3230);pubsub_client.connect(function(socket){varchannel=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');}});});});

接口

pubsub.Client(redis_uri)

传递redis_uri 参数启动pubsub客户端实例

本地进程订阅发布事件

client.Channel(channel_name)

开启channel_name隧道 返回隧道实例

channel.sub(event, cb)

订阅event事件. cb 为事件处理函数

channel.pub(event, data, cb)

发布data数据到 event事件中

HTTP REST 订阅发布事件

client.http()

http 返回 express 的app实例. 但增加如下方法

app.channel('channel')

创建 HTTP Channel。 返回channel实例和 Client.Channel() 一致

app.response(channel_name, event, data)

HTTP 响应订阅事件处理结果. 该结果会被保存到redis中, 等待用户主动查询处理结果.

socket模式订阅发布事件

socket模式服务端

client.socket(port, address)

配置服务端监听端口 监听地址, 返回socket server 实例

server.connect(cb)

服务端配置客户端连接回调函数,当有新的客户端连接后 调用此回调函数

server.socketSub(socket, channelName, event)

服务端在socket监听器商订阅channelName 隧道的Event 事件,事件触发后写输入到socket 通知客户端

server.socketPub(socket, channelName, event, data)

服务端在客户端socket的channelName隧道触发Event事件

server.channel(socket, channel_name)

创建服务端隧道实例

server.tell(event, data)

返回事件event处理结果

channel.sub(event, cb)

订阅event 事件,事件达到后调用cb 处理函数

server.start(cb)

服务端开始监听客户端, 完成后调用回调函数

socket模式客户端

_SocketClient 类

.connect(port, address)

在端口port和ip地址address建立socket 链接

.channel(channel_name, options)

开启channel_name隧道 返回隧道实例

_Channel类

.pub(event, data, cb)

在socket服务端发布event事件

.sub(event, cb)

从socket服务端订阅event事件

TODO

  • HTTP REST 模式需要区分不同用户的事件发布和事件处理 避免不同用户互相覆盖处理结果

  • Socket 模式断开后自动重连

  • 增加日志处理

  • 更多细节处理和状态检测

About

A pub-sub module basic on node.js and redis

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages