sub/pub套接字结合使用可实现消息广播模式(Topics && Broadcast)
服务端只管发布,不管客户端是否连接,也不管是不是丢消息,但客户端连接上来以后就不会丢消息。
这个模式与push/pull的区别是很明显的,
不会像push/pull那样一定要等待双方连接才传输数据。
pub服务端只管自己顾自己的发布消息,而不管别人有没有收到。
一个典型的例子就是报时服务器,下面看代码。
pub服务端:
import console;
import nnmsg;
var sock = nnmsg.socket.pub();
sock.bind ("ws://*:7713")
console.log("pub服务端已启动,不管客户端是不是连接上来,也不考虑有没有人接收消息")
for(i=1;100;1){
sock.send("报时:" + tostring( time() ) );
console.log("报时:" + tostring( time() ) )
sleep(1000)
}
console.pause(true);
sub客户端: import console;
import nnmsg;
var sock = nnmsg.socket.sub();
console.log("客户端等待连接")
//一定要指定订阅的主题前缀,指定为空订阅所有主题
sock.subscribe("报时:");
if( sock.connect("ws://127.0.0.1:7713") ){
var s = sock.recv();
while(s){
console.log("服务器返回:",s );
s = sock.recv();
}
}
console.pause(true);
这个sub客户端有一点特别,一定要用 sock.subscribe("报时:"); 指定你感兴趣的消息, 这个函数的参数指定要订阅消息的前几个字符,这几个字符没有特别格式的要求,只要消息是由这几个字符开始就可以。
pus/sub模式里,服务端的同一个消息可能被多个客户端接收,也可能根本没有客户端接收, push/pull则完全不同 - 服务端消息一定会被一个客户端,并且也只会被一个客户端取走。
|