【发布时间】:2011-07-15 02:47:07
【问题描述】:
我正在尝试在PUSH / PULL 模式下将python 与zeroMQ 一起使用,每隔几秒发送一次大小为4[MB] 的消息。
由于某种原因,虽然看起来所有消息都已发送,但似乎只有其中一些消息已被服务器接收。我在这里想念什么?
这是客户端的代码 -- client.py
import zmq
import struct
# define a string of size 4[MB]
msgToSend = struct.pack('i', 45) * 1000 * 1000
context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.connect("tcp://127.0.0.1:5000")
# print the message size in bytes
print len(msgToSend)
socket.send(msgToSend)
print "Sent message"
这是服务器的代码 -- server.py
import zmq
import struct
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind("tcp://127.0.0.1:5000")
while True:
# receive the message
msg = socket.recv()
print "Message Size is: {0} [MB]".format( len(msg) / (1000 * 1000) )
我错过了什么?如何保证消息始终发送且不丢失?
以防万一,我使用的是Ubuntu 10.04 32 位、具有 2[GB] RAM 的 Core Duo 机器。
注意:我使用RabbitMQ 尝试了相同的示例,一切正常——没有消息丢失。我很困惑,因为我经常听到对zeroMQ的赞美。为什么在RabbitMQ 成功的地方失败了?
【问题讨论】: