ZeroMQ 是一套網路通訊函式庫,詳細內容請 參考。
ZeroMQ 提供幾種通訊模式,本文以 ZeroMQ 所提供最簡單的通訊方式 [Request, Response] 做為範例,讓大家能快速了解該如何使用 ZeroMQ 做為 C# 程式與 Python 程式的溝通橋梁。
Request 即是大家所熟知的 client 端;而 Response 則是 server 端。
(為什麼不使用常見的方式命名呢...?
使用 C# 做為 client 端
先透過 NuGet 安裝 NetMQ 套件。
// 綁定一個位置,client 與 server 需綁定相同位置
var address = "tcp://127.0.0.1:5566";
// client 端要使用 RequestSocket 類別
using (var client = new RequestSocket(address))
{
var message = "hello";
// client 傳送訊息給 server 端
client.SendFrame(message);
// 最多等待 10 秒,若超過 10 秒仍不回應則略過
var timeout = TimeSpan.FromSeconds(10);
client.TryReceiveFrameString(timeout, out string result);
Debug.WriteLine(result);
}
使用 Python 做為 server 端
先透過 pip 或 conda 安裝 zmq
import time
import zmq
# 綁定一個位置,client 與 server 需綁定相同位置
address = "tcp://127.0.0.1:5566"
ctx = zmq.Context()
# 使用 zmq.REP 模式,做為 server 端
rep = ctx.socket(zmq.REP)
rep.bind(address)
# 等待連線
time.sleep(1)
while True:
# 嘗試接收從 client 端傳來的訊息
message = rep.recv_string()
if message == 'hello':
result = 'hi'
else:
result = 'fail'
# 回傳訊息給 client 端
rep.send_string(result)
參考
https://github.com/zeromq/netmq
https://github.com/zeromq/pyzmq/tree/master/examples