Java "Reference" ZeroMQ 的解决方法,用于通过 ZMQ 套接字发送对象



我有一个使用ZeroMQ套接字进行进程间通信的Java程序。我有线程工作线程做一些昂贵的工作,当他们用结果完成工作时,我想通过 inproc 套接字将该结果对象传递给"发送者"线程,以便它可以将对象发送到客户端。我看过一些例子,C++这通常是使用指针完成的,但在 Java 中没有指针,我不想序列化对象只是为了能够将对象传递给另一个线程。

我有什么可能性?我只能有效地将"轻量级"值传递给套接字,例如字符串或基元类型。

谢谢!

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

即,要在同一进程中的线程之间传递引用(或指针),请不要使用 ZeroMQ,而是使用 BlockingQueue 之类的东西。

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

我使用 XStream 将对象序列化/反序列化为 JSON 或 XML 字符串,并且非常易于使用。

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

我也有同样的疑问。它不是关于对 zeromq 上另一个进程的 sendig 引用。那永远行不通。问题是对于非处理器工作线程,发送消息意味着锯齿化和去服务器化。对于字符串和基元类型,它是微不足道的,但对于大型业务对象,它没有意义(除非我缺少一个技巧)。

另一种解决方法是将业务对象(或结果)由工作线程存储在缓存中,只需将索引传递给"sender"线程。这个"发送方"线程将从缓存中获取结果并将其发送到"客户端"。

但是,我不确定这是否是预期目的。我在同一个论坛上提出了同样的问题。

最新更新