【发布时间】:2021-03-24 05:46:47
【问题描述】:
我正在尝试通过 ZeroMQ 在 c#(5.0) 和 python (3.9) 应用程序之间进行通信。对于 .Net,我使用 NetMQ 和 python PyZMQ。
只要两个应用程序使用相同的语言,我就可以毫无问题地进行通信
- c# 应用到 c# 应用;
- 蟒蛇->蟒蛇;
- java -> java,
但是当我尝试在不同语言之间进行连接时,麻烦就开始了。
- java -> c# 和 reverse 也可以正常工作 [edited]
我没有收到任何错误,但它也不起作用。
我首先尝试了PUB-SUB Archetype 模式,但由于它不起作用,我尝试了REQ-REP,所以仍然可以找到 "PUB-SUB"-version 的一些剩余部分在代码中。
我的 Python 代码如下所示:
def run(monitor: bool):
loop_counter: int = 0
context = zmq.Context()
# socket = context.socket(zmq.PUB)
# socket.bind("tcp://*:5557")
socket = context.socket(zmq.REP)
socket.connect("tcp://localhost:5557")
if monitor:
print("Connecting")
# 0 = Longest version, 1 = shorter version, 2 = shortest version
length_version: int = 0
print("Ready and waiting for incoming requests ...")
while True:
message = socket.recv()
if monitor:
print("Received message:", message)
if message == "long":
length_version = 0
elif message == "middle":
length_version = 1
else:
length_version = 2
sys_info = get_system_info(length_version)
"""if not length_version == 2:
length_version = 2
loop_counter += 1
if loop_counter == 15:
length_version = 1
if loop_counter > 30:
loop_counter = 0
length_version = 0"""
if monitor:
print(sys_info)
json_string = json.dumps(sys_info)
print(json_string)
socket.send_string(json_string)
我的 C# 代码:
static void Main(string[] args)
{
//using (var requestSocket = new RequestSocket(">tcp://localhost:5557"))
using (var requestSocket = new RequestSocket("tcp://localhost:5557"))
{
while (true) {
Console.WriteLine($"Running the server ...");
string msg = "short";
requestSocket.SendFrame(msg);
var message = requestSocket.ReceiveFrameString();
Console.WriteLine($"requestSocket : Received '{message}'");
//Console.ReadLine();
Thread.Sleep(1_000);
}
}
}
【问题讨论】:
-
我在两个程序中都设置了断点(设置了相同的端口号:)),它确实似乎在发送数据(c#),但是 python 代码中的断点(就在 message = socket. recv()) 永远不会被激活。我尝试使用 requestSocket.SendFrameEmpty();在 C# 中,只是为了触发 Python 中的任何内容,但没有成功。
-
如下所述,这只是一个附带项目,不幸的是我尝试解决这个问题的时间有限。我已经通过在 python 项目中转储 ZMQ(而不是在 Java 和 C# 中 - 一切正常)并用良好的旧 TCP 和套接字替换它来解决它,现在它工作得很好。我不知道如何处理这个问题,因为从技术上讲它还没有解决,但我当然不会再为此付出努力。我也不能发布我的 TCP 代码,因为这不是这个特定问题的答案。欢迎您的意见。
标签: zeromq publish-subscribe pyzmq netmq request-response