2012-09-27 37 views
6

Tôi đang chuyển một số mã Python sử dụng ổ cắm TCP thô đến ZeroMQ để có độ ổn định tốt hơn và giao diện rõ ràng hơn.Gửi byte thô qua ZeroMQ bằng Python

Phải tắt dơi Tôi có thể thấy rằng một gói byte nguyên duy nhất không được gửi như tôi mong đợi.

Trong socket thô:

import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.connect((HOST, PORT)) 
sock.send('\x00\x01\x02 and some more raw bytes') 

Đó là đoạn code làm việc hiện tại. Đây là cùng một mã sử dụng ZeroMQ:

import zmq 
context = zmq.Context() 
sock = context.socket(zmq.REQ) # this connection utilizes REQ/REP 
sock.connect('tcp://{0}:{1}'.format(HOST, PORT)) 
sock.send('\x00\x01\x02 and some more raw bytes') 

Nhưng khi tôi kiểm tra các gói đi qua mạng, chúng chắc chắn không phải là những gì tôi mong đợi. Tôi đang thiếu gì ở đây?

Ngoài ra, khi kiểm tra mã này trên giao diện vòng lặp (127.0.0.1) với máy chủ giả có vẻ như nó hoạt động tốt.

Sử dụng Python 2.7 nếu nó quan trọng (unicode hoặc whatnot).

+0

Không có đầu ra, tôi đang kiểm tra lưu lượng truy cập mạng thô, là những gì bạn đang tìm kiếm? –

+1

zeromq sử dụng dữ liệu riêng của nó marshaling trên ổ cắm; nếu bạn sniff các gói, họ không phải được chính xác giống nhau –

+0

@BartekBanachewicz - rất đúng, cảm ơn. Nhận thấy câu trả lời của tôi từ lúc này. –

Trả lời

4

Oh. Wow. Tôi đã bỏ qua một lỗ hổng lớn trong thử nghiệm của mình, máy chủ từ xa mà tôi đang thử nghiệm đang mong đợi một kết nối TCP thô, không phải là kết nối ZMQ.

Tất nhiên ZMQ không thể chuyển tin nhắn, thậm chí không thương lượng kết nối thành công. Khi tôi thử nghiệm cục bộ, tôi đã thử nghiệm với một máy chủ ZMQ giả, vì vậy nó hoạt động tốt.

Nếu tôi đã đăng mã máy chủ thì ngay lập tức có nghĩa là đó là vấn đề.

Trong mọi trường hợp, xin lỗi vì báo động giả.

Các vấn đề liên quan