gpt4 book ai didi

android - 如何在 ZeroMQ(jzmq) 3.xx 中使用 XPUB 和 XSUB 实现带有代理的发布-订阅网络

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:59 25 4
gpt4 key购买 nike

我正在尝试使用下图中提供的 XPUB 和 XSUB 来实现。我已经完成了他们提供的示例,但无法获得 Java 中的 XPUB 和 XSUB。 Here他们在 C 中给出了一个示例,这个示例有点复杂,因为我是 ZeroMQ 的新手。

Pub-Sub Network with a Proxy in ZeroMQ
我正在尝试使用 jni wrapped version 在 android 中使用它.请帮我找一个例子,如何使用 java 在 ZeroMQ 中实现这个带有代理的 Pub-Sub 网络

目前我指的是http://zguide.zeromq.org/page:all

我试过如下移植它。订阅者.java

public class Subscriber extends Thread implements Runnable {

private static final String TAG = "Subscriber";
private Context ctx;

public Subscriber(ZMQ.Context z_context) {
this.ctx = z_context;
}

@Override
public void run() {

super.run();

ZMQ.Socket mulServiceSubscriber = ctx.socket(ZMQ.SUB);
mulServiceSubscriber.connect("tcp://localhost:6001");
mulServiceSubscriber.subscribe("A".getBytes());
mulServiceSubscriber.subscribe("B".getBytes());


while (true) {
Log.d(TAG, "Subscriber loop started..");
String content = new String(mulServiceSubscriber.recv(0));
Log.d(TAG, "Subscriber Received : "+content);
}
}

Publisher.java

public class Publisher extends Thread implements Runnable {

private static final String TAG = "Publisher";
private Context ctx;

public Publisher(ZMQ.Context z_context) {
this.ctx = z_context;
}

@Override
public void run() {

super.run();

ZMQ.Socket publisher = ctx.socket(ZMQ.PUB);
publisher.connect("tcp://localhost:6000");

while (true) {
Log.d(TAG, "Publisher loop started..");
publisher.send(("A Hello " + new Random(100).nextInt()).getBytes() , 0);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

XListener.java(现在是一个简单的 Forwarder)

public class XListener extends Thread implements Runnable {

private static final String TAG = null;
private Socket publisherX;
private Context ctx;
private Socket subscriberX;

public XListener(ZMQ.Context ctx, ZMQ.Socket subscriberX,
ZMQ.Socket publisherX) {
this.ctx = ctx;
this.subscriberX = subscriberX;
this.publisherX = publisherX;

}

@Override
public void run() {
super.run();
while (true) {
Log.d(TAG, "XListener loop started..");

String msg = new String(subscriberX.recvStr());
Log.v(TAG, "Listener Received: " +"MSG :"+msg);
publisherX.send(msg.getBytes(), 0);
}
}

在应用ma​​in()

private void main() {        ZMQ.Context ctx = ZMQ.context(1);   

ZMQ.Socket subscriberX = ctx.socket(ZMQ.XSUB);
subscriberX.bind("tcp://*:6000");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ZMQ.Socket publisherX = ctx.socket(ZMQ.XPUB);
publisherX.bind("tcp://*:6001");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

new XListener(ctx, subscriberX, publisherX).start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

new XSender(ctx, subscriberX, publisherX).start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new Subscriber(ctx).start();
new Publisher(ctx).start();
}

使用代码我无法收听 XSUB。在移植 espresso.c 时,我无法在 ZMQ 的 java 绑定(bind)中找到任何包装器。如何实现一个简单的代理或者我错过了什么??

最佳答案

哇,我在回答我自己的问题。我错过了将转发器从 publisherX 添加到 subscriberX。这是缺少的代码。现在 XSUB 和 XPUB 可以发送和获取数据了。

public class XSender extends Thread implements Runnable {

private static final String TAG = null;
private Socket publisherX;
private Context ctx;
private Socket subscriberX;

public XSender(ZMQ.Context ctx, ZMQ.Socket subscriberX,
ZMQ.Socket publisherX) {
this.ctx = ctx;
this.subscriberX = subscriberX;
this.publisherX = publisherX;

}

@Override
public void run() {
super.run();
while (true) {
// Read envelope with address
Log.d(TAG, "XListener loop started..");

String msg = new String(subscriberX.recv(0));
Log.v(TAG, "Listener Received: " +"MSG :"+msg);
publisherX.send(msg.getBytes(), 0);

}


}

关于android - 如何在 ZeroMQ(jzmq) 3.xx 中使用 XPUB 和 XSUB 实现带有代理的发布-订阅网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14516102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com