Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇语;参考资料;ZeroMQ通过ZMQ套接字发送对象的变通方法_Java_Reference_Zeromq - Fatal编程技术网

Java 爪哇语;参考资料;ZeroMQ通过ZMQ套接字发送对象的变通方法

Java 爪哇语;参考资料;ZeroMQ通过ZMQ套接字发送对象的变通方法,java,reference,zeromq,Java,Reference,Zeromq,我有一个Java程序,它使用ZeroMQ套接字进行进程间通信。我有一些线程工作者做一些昂贵的工作,当他们完成他们的工作并得到结果时,我想通过inproc套接字将结果对象传递给“发送者”线程,这样它就可以将对象发送给客户机。我看到过一些例子,在C++中,通常是用指针来完成的,但是在java中没有指针,我不想序列化这个对象,只是为了能够把对象传递给另一个线程。p> 我有什么可能性?我只能有效地将“轻量级”值传递给套接字,如字符串或基本类型 谢谢 无论您传递的是引用还是指针,都大致相同。您可以通过数据

我有一个Java程序,它使用ZeroMQ套接字进行进程间通信。我有一些线程工作者做一些昂贵的工作,当他们完成他们的工作并得到结果时,我想通过inproc套接字将结果对象传递给“发送者”线程,这样它就可以将对象发送给客户机。我看到过一些例子,在C++中,通常是用指针来完成的,但是在java中没有指针,我不想序列化这个对象,只是为了能够把对象传递给另一个线程。p> 我有什么可能性?我只能有效地将“轻量级”值传递给套接字,如字符串或基本类型


谢谢

无论您传递的是引用还是指针,都大致相同。您可以通过数据结构在同一进程中的线程之间传递它,但不能通过套接字传递它并期望它在不同的进程中工作


i、 e.要在同一进程中的线程之间传递引用(或指针),请不要使用ZeroMQ,而是使用BlockingQueue之类的工具。

我也有类似的情况,但我会序列化对象,因为客户端和服务器在不同的平台上使用不同的语言编写。它还允许我使用打印消息的简单代理调试消息

我使用JSON或XML字符串来序列化/反序列化对象,使用起来非常简单


另一个解决方案是,但我发现它序列化JVM时区中的日期,我需要向运行在不同时区的计算机发送/接收消息。XStream使用GMT作为默认时区。

我也有同样的疑问。这与通过zeromq向另一个进程发送引用无关。那是行不通的。问题是对于inproc工作线程,发送消息意味着序列化和反序列化。对于字符串和基元类型来说,这是微不足道的,但是对于大型业务对象来说,这是没有意义的(除非我错过了一个技巧)

另一种解决方法是让工作线程将业务对象(或者在您的情况下是结果)存储在缓存中,然后将索引传递给“发送者”线程。此“发送者”线程将从缓存中获取结果并将其发送到“客户端”


然而,我不确定这是否是预期目的。我在同一个论坛上提出了相同的查询。

我使用msgpack(从协议缓冲区跳出来)跨平台进行对象序列化,速度非常快!这正是我现在正在做的。谢谢