我正在使用C ++创建一个应用程序,其中两个发布者(pub1
和pub2
)应该向3个订阅者发送数据,比如s1
,s2
,{ {1}}。
模式如下:
s3
将数据发送到Pub1
和s1
s2
将数据发送到Pub2
和s2
现在,如果我为发布者使用不同的TCP端口,它正在运行,但我需要使用单个端口,当两个发布者使用相同的端口时,只有绑定的发布者才能使用而另一个发布者抛出内存错误。
有什么想法吗?
答案 0 :(得分:1)
在内部使用zmq::proxy
允许多个发布套接字通过一个TCP端口提供数据。
P1(subject P1) -inproc-> | |--tcp-> SUB(P1)
|--XSUB(zmq::proxy)XPUB-|--tcp-> SUB(P1,P2)
P2(subject P2) -inproc-> | |--tcp-> SUB(P2)
方法:
发布商申请
PUB
套接字(在发布商应用内),一个发布主题为“P1”,另一个发布“P2”XSUB
zmq::proxy
侧//:inproc
上方XPUB
。代理也在您的发布商应用程序中运行subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P1", 2)
侧)绑定到单个TCP端口。订阅者申请
subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P2", 2)
File file = new File("pathname");
MediaScannerConnection.scanFile(getContext(), new String[]{file.getAbsolutePath()}, null /*mimeTypes*/, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String s, Uri uri) {
// uri is in format content://...
}
});