用不同语言编写的 ZeroMQ 套接字的兼容性

我已经构建了一个基于 python 编写的应用程序ZeroMQ,但现在我面临着性能问题。所以我决定使用 Golang 重写我的应用程序的一些模块。但是当我尝试在不同语言实现的套接字之间建立消息传递时,任何事情都不起作用。


到目前为止,我已经进行了搜索,但没有找到有关ZeroMQ使用不同语言的兼容性问题的任何信息。


所以问题是:我可以使用golang进行基于ZeroMQpython编写的客户端的服务器实现来连接它吗?

还是我必须只使用一种语言?


编辑:这是我正在尝试正常工作的典型服务器和客户端


服务器:


import zmqctx = zmq.Context()

sock = ctx.socket(zmq.REP)

sock.bind("tcp://*:57000")

msg = sock.recv()

客户:


package main


import (

    zmq "github.com/pebbe/zmq4"

)


func main() {


    ctx, _ := zmq.NewContext()

    sock, _ := ctx.NewSocket(zmq.REQ)


    sock.Connect("tcp://localhost:57000")

    sock.Send("simple message", 0)

}

服务器卡在 sock.recv()


慕村9548890
浏览 238回答 2
2回答

蝴蝶不菲

编程语言能够相互通信——是的,你可以用 Go 编写一个服务器,用 Python 编写一个客户端,并让它们相互通信。如果您尝试使用原始套接字进行通信,请查看所需语言的文档并确保序列化数据在结构上匹配。例如,您可以决定一个结构并在Python或代码中实现您的有效负载,然后在Go 中匹配该结构(Go中可能有更好的/stdlib 方式;我对这种语言的经验不是很丰富)。担心这些细节的潜在维护和实现头痛是人们使用更高级别协议的原因——这正是 ZeroMQ 的一个很好的用例。如果您使用消息队列作为操作的主干,只需将其用作共享协议即可。如果您的 Python 代码可以与 ZeroMQ 对话,那么它就在正确地完成它的工作——您的 Go 代码不需要知道它正在与 Python 对话。在这种情况下,您的新Go 服务器将绑定到 ZeroMQ,您的Python 客户端将绑定到 ZeroMQ,并且您的两种异构语言不需要相互了解。

ITMISS

这有点晚了,但我在尝试找到 golang-to-python 0mq 实现时发现了这篇文章。在我的 golang 代码中,我刚刚更改zmq为zmq4,一切都对我有用:import (    zmq4 "github.com/pebbe/zmq4")func main() {    ctx, _ := zmq4.NewContext()    sock, _ := ctx.NewSocket(zmq4.REQ)    sock.Connect("tcp://localhost:57000")    sock.Send("simple message", 0)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go