[C#][Python] 使用 ZeroMQ 做為 C# 程式與 Python 程式的溝通橋梁

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