如何使用ZeroMQ将字节数组发送到套接字?

时间:2014-11-07 23:24:38

标签: java bytearray zeromq

我第一次使用ZeroMQ并编写了一个简单的实用程序来将数据发送到套接字。下面是我使用ZeroMQ将数据发送到套接字的简单类。截至目前我正在玩ZeroMQ所以写了一个简单的类,如下所示,在我熟悉之后,我需要在多线程代码中加入相同的代码。

public static void main(String[] args) {

    ZMQ.Context context = ZMQ.context(1);

    // as of now sending only 10 data
    for (int i = 1; i <= 10; i++) {
        ZMQ.Socket socket = context.socket(ZMQ.PUSH);
        socket.connect("tcp://localhost:10000");

        byte[] packByteArray = generateRandomStringAsBytes();

        ZMsg req = new ZMsg();
        req.add(packByteArray);
        req.send(socket);

        socket.close();
    }
    context.term();
}

由于这是我的第一次,所以我不知道这是否是使用ZeroMQ以字节数组形式发送数据的正确有效方法?我听说过各种各样的东西,比如ZFrame和ZMsg,不确定我们何时需要同时使用这两种方法以及将字节数组发送到套接字的最佳方式。

在我们的例子中,我们需要将随机字符串作为字节发送到套接字,因此不确定使用ZeroMQ的最佳和最有效的方法是什么?

1 个答案:

答案 0 :(得分:4)

从阅读GPS航点列表中,没有人会喜欢攀登珠穆朗玛峰的激情,无论是短期还是长期......

因此,阅读代码示例,而不事先了解基本概念。


正确的方式

ZeroMQ的设计具有一定的格言 - 零 - 阻止,零 - 共享,零 - 复制,零代理( s),最小 - 延迟,消息框架

人们应该把它视为依赖于设置快速,半持久 F ormal- S caleable- C ommunication- P attern 图层(不是一套耗材一次性用品)

虽然没有人可能限制您使用混合的MsgFrame以及 for -loop-ed设置/丢弃消息套接字,这不是方法,ZeroMQ可以实现最强大的力量。

很好地理解将基本ZeroMQ基元扩展到的每种特定样式的行为代码)和原因一个强大的消息传递层,下层有限状态自动机,值得花一两个星期。

在您描述的情况下,最好的第一步可能是忘记编码并获取系统的主要视图,以便获得ZeroMQ架构的全面图片。

an extended approach with SIG_KILL add-on

缺少关键点只会导致误解的设计方法以及更大的浪费时间

  • 设计要实施的分布式消息传递层行为/抽象
  • 在每个流程/线程/节点中设置资源并安排.bind() / .connect()方法的正确顺序
  • 可能的非阻止操作模式
  • 性能调整(水印设置,超时,子采样/超级采样)
  • 适当的资源发布
  • 异常处理是设计的一个整体习惯
  • 在每个进程/线程/节点中强制终止Context以避免泄漏

高效的方式

这可能有不同的含义 - TimeDOMAIN效率(即快速),MemoryFOOTPRINT效率(即不浪费MEM和放弃垃圾收集),I / O资源效率 或编码/再利用效率。

ZeroMQ做了一个大的&amp;在内部效率方面做得非常出色,用户可以从图书馆内的硕士学位课程中受益。

同样的方式,图书馆的用户可能会以低效的方式(不是谈论一种主要错误的方式)破坏所有好处,如何将ZeroMQ工具用于各自的任务。

最好的下一步

恕我直言,如果你认真对待专业信息,那么可以获得这本优秀的书籍,并获得基本的设置知识,更复杂的多插槽消息层设计,以及软信令和信息。还有关于并发,异质,分布式处理的强大力量的进一步思考,以推进你的学习曲线。

Pieter Hintjens&#39;预订&#34; 代码连接,第1卷&#34; (以PDF格式提供)不仅仅是针对您的问题的推荐来源。

您将获得进一步使用ZeroMQ的理由

ZeroMQ是一个很棒的工具,不仅仅是消息传递层本身。值得的时间&amp;努力。 multi-socket messaging layer with soft signalling