Java 爪哇语;参考资料;ZeroMQ通过ZMQ套接字发送对象的变通方法
我有一个Java程序,它使用ZeroMQ套接字进行进程间通信。我有一些线程工作者做一些昂贵的工作,当他们完成他们的工作并得到结果时,我想通过inproc套接字将结果对象传递给“发送者”线程,这样它就可以将对象发送给客户机。我看到过一些例子,在C++中,通常是用指针来完成的,但是在java中没有指针,我不想序列化这个对象,只是为了能够把对象传递给另一个线程。p> 我有什么可能性?我只能有效地将“轻量级”值传递给套接字,如字符串或基本类型Java 爪哇语;参考资料;ZeroMQ通过ZMQ套接字发送对象的变通方法,java,reference,zeromq,Java,Reference,Zeromq,我有一个Java程序,它使用ZeroMQ套接字进行进程间通信。我有一些线程工作者做一些昂贵的工作,当他们完成他们的工作并得到结果时,我想通过inproc套接字将结果对象传递给“发送者”线程,这样它就可以将对象发送给客户机。我看到过一些例子,在C++中,通常是用指针来完成的,但是在java中没有指针,我不想序列化这个对象,只是为了能够把对象传递给另一个线程。p> 我有什么可能性?我只能有效地将“轻量级”值传递给套接字,如字符串或基本类型 谢谢 无论您传递的是引用还是指针,都大致相同。您可以通过数据
谢谢 无论您传递的是引用还是指针,都大致相同。您可以通过数据结构在同一进程中的线程之间传递它,但不能通过套接字传递它并期望它在不同的进程中工作
i、 e.要在同一进程中的线程之间传递引用(或指针),请不要使用ZeroMQ,而是使用BlockingQueue之类的工具。我也有类似的情况,但我会序列化对象,因为客户端和服务器在不同的平台上使用不同的语言编写。它还允许我使用打印消息的简单代理调试消息 我使用JSON或XML字符串来序列化/反序列化对象,使用起来非常简单
另一个解决方案是,但我发现它序列化JVM时区中的日期,我需要向运行在不同时区的计算机发送/接收消息。XStream使用GMT作为默认时区。我也有同样的疑问。这与通过zeromq向另一个进程发送引用无关。那是行不通的。问题是对于inproc工作线程,发送消息意味着序列化和反序列化。对于字符串和基元类型来说,这是微不足道的,但是对于大型业务对象来说,这是没有意义的(除非我错过了一个技巧) 另一种解决方法是让工作线程将业务对象(或者在您的情况下是结果)存储在缓存中,然后将索引传递给“发送者”线程。此“发送者”线程将从缓存中获取结果并将其发送到“客户端”
然而,我不确定这是否是预期目的。我在同一个论坛上提出了相同的查询。我使用msgpack(从协议缓冲区跳出来)跨平台进行对象序列化,速度非常快!这正是我现在正在做的。谢谢