我已经设置了两个小脚本,用 pyzmq 模拟发布和订阅过程。但是,我无法使用inproc
传输将消息发送到我的订阅者客户端。我可以tcp://127.0.0.1:8080
很好地使用,只是不能使用inproc。
pub_server.py
import zmq
import random
import sys
import time
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("inproc://stream")
while True:
socket.send_string("Hello")
time.sleep(1)
sub_client.py
import sys
import zmq
# Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.setsockopt_string(zmq.SUBSCRIBE, '')
socket.connect("inproc://stream")
for x in range (5):
string = socket.recv()
print(string)
如何成功更改我的代码,以便能够在我的两个脚本之间使用 inproc 传输方法?
编辑:
我更新了我的代码以进一步反映@larsks 评论。我仍然没有收到我发布的字符串 - 我做错了什么?
import threading
import zmq
def pub():
context = zmq.Context()
sender = context.socket(zmq.PUB)
sender.connect("inproc://hello")
lock = threading.RLock()
with lock:
sender.send(b"")
def sub():
context = zmq.Context()
receiver = context.socket(zmq.SUB)
receiver.bind("inproc://hello")
pub()
# Wait for signal
string = receiver.recv()
print(string)
print("Test successful!")
receiver.close()
if __name__ == "__main__":
sub()