【发布时间】:2017-01-01 18:28:31
【问题描述】:
我基于 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()
【问题讨论】:
-
我最近将我的一个慢速 python (celery) 模块重写为 Go。它通过 RabbitMQ 与系统的其他部分进行通信。我不知道 ZeroMQ,但我猜它对所有连接客户端都有一个通用协议,所以它应该可以工作。也许你做错了什么?您遇到了什么样的问题?
-
当你说“重写,比方说,Golang”时,你的意思是这是假设的,还是你真的做了重写?如果您尚未完成重写,我建议您为 python 编写 C 扩展以提高性能。
-
@Tadhg McDonald-Jensen,说实话,我使用 Golang 作为第二语言
-
通过 FFI 编写 C 比仅仅在 Go 中进行破解要困难得多——@pupizoid 使用 ZeroMQ 的事实意味着无需专注于解释器本地对象。跨度>
-
参考您的示例代码,
zmq.REP在收到请求之前阻止recv。您确定有可供客户端使用的消息吗?