This is the client side code that I use to communicate with the server:

private byte[] getByte(final String table, final String name,
final int doc_off, final int doc_len, final int comp_off,
final int comp_len, final char compressionType) throws Exception {
File file = new File(cacheRoot, table.substring(0, 3) + "/DOC/" + name); //$NON-NLS-1$
Context ctx = ZMQ.context(1);

Socket req = ctx.socket(ZMQ.REQ);
req.connect(ENDPOINT);

// TODO Crear POJO en vez de Map
Map<String, String> params = new HashMap<String, String>();
params.put("path", file.getAbsolutePath());
params.put("dOff", String.valueOf(doc_off));
params.put("dLen", String.valueOf(doc_len));
params.put("cOff", String.valueOf(comp_off));
params.put("clen", String.valueOf(comp_len));
params.put("cType", String.valueOf(compressionType));

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(params);
oos.close();
params.clear();
baos.close();

req.send(baos.toByteArray(), NO_FLAGS);
byte[] data = "">
req.close();
ctx.term();
return data;
}


And on the server side I use the three attached classes

public void run() {
// Prepare our context and sockets
Context context = ZMQ.context(1);
Socket frontend = context.socket(ZMQ.ROUTER);
Socket backend = context.socket(ZMQ.DEALER);
frontend.bind("tcp://*:5559");
backend.bind("inproc://workers");

Thread threads[] = new Thread[workers];
for (int i = 0; i < threads.length; i++) {
threads[i] = new WorkerThread(i, context);
threads[i].start();
}
System.out.println("launch and connect broker.");

// Initialize poll set
Poller items = context.poller(2);
items.register(frontend, Poller.POLLIN);
items.register(backend, Poller.POLLIN);

boolean more = false;
byte[] message;

// Switch messages between sockets
try {
while (!Thread.currentThread().isInterrupted()) {
// poll and memorize multipart detection
items.poll();

if (items.pollin(0)) {
while (true) {
// receive message
message = frontend.recv(0);
more = frontend.hasReceiveMore();

// Broker it
backend.send(message, more ? ZMQ.SNDMORE : 0);
if (!more) {
break;
}
}
}
if (items.pollin(1)) {
while (true) {
// receive message
message = backend.recv(0);
more = backend.hasReceiveMore();
// Broker it
frontend.send(message, more ? ZMQ.SNDMORE : 0);
if (!more) {
break;
}
}
}
}
} finally {
// We never get here but clean up anyhow
frontend.close();
backend.close();
context.term();
}
}

Does that help solving the problem?
Gonzalo Vásquez Sáez
Gerente Investigación y Desarrollo (R&D)
Altiuz Soluciones Tecnológicas de Negocios Ltda.
Av. Nueva Tajamar 555 Of. 802, Las Condes - CP 7550099
+56 2 335 2461
gvasq...@altiuz.cl
http://www.altiuz.cl
http://www.altiuzreports.com
  

El 05-03-2013, a las 18:19, Pieter Hintjens <p...@imatix.com> escribió:


On Tue, Mar 5, 2013 at 9:57 PM, Gonzalo Vasquez <gvasq...@altiuz.cl> wrote:
Hi there!

Upon stressing a Java / ZMQ based piece of software, I'm getting TWO repeated errors every now and then, they are:

Hi Gonzalo,

As with any error you're trying to report (to any project, I guess), the best tool is a minimal (I can't emphasize that enough) test case that provokes the crash. If you can make this in Java we can recreate it in C, and see where the problem is.

The test case is essential to fixing the problem since after we fix it we have to run the same test case to be 100% the problem is gone.

-Pieter

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Attachment: ObjetoRemoto.java
Description: Binary data

Attachment: Server.java
Description: Binary data

Attachment: WorkerThread.java
Description: Binary data

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to