ZeroMQ 跨线程、跨进程、跨语言、跨系统、跨网络 —— 连接一切

ZeroMQ 是什么?

简单说,它是一个通用消息传递库,可以用简洁的代码在不同媒介间传输信息,例如线程间、进程间、不同编程语言间、不同操作系统间、不同的网络环境间等等。

它可以传递任何形式的信息,例如数字、文字、二进制等,并且没有大小限制。

它模式多样,常用的有 请求/回复、发布/订阅、推送/拉取等,可轻松实现 1对1、1对多、多对多等各式传输。

它非常高效, AHK 版本在 R7 5800H 处理器上,推送/拉取模式下,10字节大小的信息每秒可发送约82.3w条。

速度大概是 SendMessage 的10+倍(后者通常还只能传输数字)。

其 C 语言版本速度则更快,预估是 AHK 版本的10+倍。


它能做什么?

因为它可以连接一切,所以简单的设想就有很多可能性。

比如多线程或多进程间的通信。

比如用 AHK 给编辑器 SciTE 写扩展(原理是在官方扩展语言 Lua 中用 ZeroMQ 将事件与变量转发给 AHK )。同理,其它编辑器例如 Sublime Text 也是一样。

比如做一个新闻或天气更新服务,有10000个用户同时订阅更新。

还可以实现一个分布式计算程序,再或者写一个聊天软件也不再遥不可及。

一切都只限于想象力。

更多关于它能做什么的灵感,强烈推荐阅读官方指南的第一章、第一节 —— “Fixing the World”。

这里还有一份比较老的中文版 —— “Fixing the World(中文版)”。


简单的示例

下面是一个简单的例子,演示客户端发送10000次消息给服务端,同时从服务端接收10000次回应。

以下代码存为 client.ahk

; Hello World 示例 - 客户端
#NoEnv
SetBatchLines -1                       ; 速度最大化

zmq := new ZeroMQ                      ; 初始化 ZeroMQ

context := zmq.context()               ; 创建一个上下文
socket := context.socket(zmq.REQ)      ; 创建一个 REQ 套接字
socket.connect("tcp://localhost:5555") ; 连接到端口

loop 10000
{
  socket.send_string("Hello")          ; 发送10000次消息(Hello)给服务端
  message := socket.recv_string()      ; 同时从服务端接收10000次回应
}
MsgBox Client received reply %message%

ExitApp

#Include ZeroMQ.ahk

以下代码存为 server.ahk

; Hello World 示例 - 服务端
#NoEnv
SetBatchLines -1                  ; 速度最大化

zmq := new ZeroMQ

context := zmq.context()
socket := context.socket(zmq.REP) ; 创建一个 REP 套接字
socket.bind("tcp://*:5555")       ; 绑定到端口

loop 10000
{
  message := socket.recv_string()
  socket.send_string("World")
}

ExitApp

#Include ZeroMQ.ahk

然后运行上面两份代码吧。

注意,无论你先运行 client.ahk 还是 server.ahk ,程序都是可以正常工作的。

感受到它的强大了吧。


本文的使命

我将尝试为 AHK 完整封装 ZeroMQ 的全部功能,并实现最新官方指南中的所有示例。

目前大部分功能都封装完成了,尤其是最常用的基本功能。

本文会提供库及示例的下载地址。

本文会更新一些我学习 ZeroMQ 过程中对部分概念的理解与经验。

学习是自己的事情,本文不会手把手的教授任何功能,你应该去看示例或指南或概念或百度。


建议的学习路径

  1. 入门示例。
  2. 官方指南。
  3. 进阶示例(即官方指南中的示例)。
  4. 百度并思考。

下载地址

示例及库:https://github.com/telppa/ahkzmq

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA捐赠
共{{data.count}}人
人已捐赠
其他函数

CV2库——优化调用逻辑和依赖函数开放(三)

2022-8-23 6:58:15

其他函数

CVUI库与CV2库——设计UI新思路(五)

2022-9-2 1:15:11

6 条回复 A文章作者 M管理员
  1. dbgba
    dbgba给您捐赠了¥10
  2. hexuren
    1河许人给您捐赠了¥2
  3. hexuren

    用标题替换引用效果会更好

  4. 蜜獾哥
    HoneyBadger给您捐赠了¥5
  5. ahker
    ahker给您捐赠了¥20
  6. sunwind

    大佬威武,一年前就深入研究了,拜读!

个人中心
购物车
优惠劵
有新私信 私信列表
搜索