我正在尝试在两个 Python STOMP 客户端之间交换二进制消息。
消息发送和接收没有问题。然而,接收器上总是丢失一些字节(似乎是随机的)。
C++ 客户端接收到的消息全部相同。发送 ASCII 文本时也没有问题。
我错过了什么?
出版商:
import random
import string
import time
import sys
import stomp
import os
hosts = [('localhost', 61613)]
conn = stomp.Connection(host_and_ports=hosts)
conn.connect('admin', 'admin', wait=True)
while 1:
b = bytes(os.urandom(100))
#b = ''.join(random.choices(string.ascii_lowercase, k=1500))
print(len(b))
conn.send(content_lengh=len(b), body=b, destination='/queue/test')
time.sleep(2)
conn.disconnect()
订阅者:
import time
import sys
import stomp
class MyListener(stomp.ConnectionListener):
def on_error(self, frame):
print('received an error "%s"' % frame.body)
def on_message(self, frame):
print(type(frame.body))
print('received message len = "%s"' % len(frame.body))
conn = stomp.Connection()
conn.set_listener('', MyListener())
conn.connect('admin', 'password', wait=True)
conn.subscribe(destination='/queue/test', id=1, ack='auto')
print("Waiting for messages...")
while 1:
time.sleep(10)
conn.disconnect()
我自己通过追踪 STOMP 发现了这一点。订阅者需要禁用自动解码,如下所示。否则,帧体将被解码为 UTF-8。
conn = stomp.Connection(auto_decode=False)