gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:43:54 25 4
gpt4 key购买 nike

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

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

那么问题是:我可以使用golang实现基于ZeroMQ的服务端和用python编写的客户端连接吗?
或者我有只使用一种语言?

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

服务器:

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()

最佳答案

编程语言能够相互通信——是的,您可以用 Go 编写服务器,用 Python 编写客户端,让它们相互通信。

如果您尝试使用原始套接字进行通信,请查看您所需语言的文档并确保序列化数据在结构上匹配。

例如您可以决定一个结构并在 Python 中实现您的有效载荷或编码,然后在 Go 中匹配该结构(Go 中可能有更好的/stdlib 方式;我对这种语言不是很有经验)。担心这些细节的潜在维护和实现难题是人们使用更高级别协议(protocol)的原因——这正是 ZeroMQ 的一个很好的用例。

如果您使用消息队列作为操作的主干,只需将其用作共享协议(protocol)即可。如果您的 Python 代码可以与 ZeroMQ 对话,那么它正在正确地完成它的工作——您的 Go 代码不需要知道它正在与 Python 对话。

在这种情况下,您的新 Go server would bind to ZeroMQ , 你的 Python client would bind to ZeroMQ ,并且您的两种异构语言不需要相互了解。

关于python - 不同语言编写的 ZeroMQ 套接字的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35918588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com