ZeroMQ「パブリッシュ/サブスクリプション」モデルのC++コード
2292 ワード
ZeroMQ環境の構築は言うまでもなく、前にも言っていました.
ZeroMQの「パブリッシュ/サブスクリプション」モデルのC++コードを見てみましょう.
pub.cppコードは次のとおりです.
sub.cppコードは次のとおりです.
先にパブリッシャーを起動すると、購読者は一部のメッセージを逃し、取り返しがつかない.
実際の効果を見てみましょう(1人のパブリッシャーと2人のサブスクライバが開いています):
OK、あまり言わない.
ZeroMQの「パブリッシュ/サブスクリプション」モデルのC++コードを見てみましょう.
pub.cppコードは次のとおりです.
#include
#include
#include
#include
#include
#include "zmq.h"
int main()
{
void* context = zmq_ctx_new();
assert(context != NULL);
void* publisher = zmq_socket(context, ZMQ_PUB);
assert(publisher != NULL);
int ret = zmq_bind(publisher, "tcp://*:5555");
assert(ret == 0);
int i = 0;
while(1)
{
char szBuf[1024] = {0};
snprintf(szBuf, sizeof(szBuf), "server i=%d", i);
ret = zmq_send(publisher, szBuf, strlen(szBuf) + 1, 0);
i++;
sleep(1);
}
zmq_close (publisher);
zmq_ctx_destroy (context);
return 0;
}
sub.cppコードは次のとおりです.
#include
#include
#include
#include
#include "zmq.h"
int main()
{
printf("Hello world!
");
void* context = zmq_ctx_new();
assert(context != NULL);
void* subscriber = zmq_socket(context, ZMQ_SUB);
assert(subscriber != NULL);
int ret = zmq_connect(subscriber, "tcp://localhost:5555");
assert(ret == 0);
ret = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "", 0);
assert(ret == 0);
while(1)
{
printf("into while
");
char szBuf[1024] = {0};
ret = zmq_recv(subscriber, szBuf, sizeof(szBuf) - 1, 0);
if (ret > 0)
{
printf("%s
", szBuf);
}
}
zmq_close(subscriber);
zmq_ctx_destroy(context);
return 0;
}
先にパブリッシャーを起動すると、購読者は一部のメッセージを逃し、取り返しがつかない.
実際の効果を見てみましょう(1人のパブリッシャーと2人のサブスクライバが開いています):
ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./server
ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./client
Hello world!
into while
server i=21
into while
server i=22
into while
server i=23
ubuntu@VM-0-15-ubuntu:~/taoge/zmq/test$ ./client
Hello world!
into while
server i=57
into while
server i=58
into while
server i=59
OK、あまり言わない.