cuốn sách gpt4 ai đã làm

python — Độ tin cậy của ZeroMQ?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 09:08:00 29 4
mua khóa gpt4 Nike

Tôi đã sử dụng ổ cắm yêu cầu/phản hồi của ZeroMQ để trao đổi tin nhắn giữa ứng dụng web và ứng dụng phụ để xử lý giảm tải. Tôi nhận thấy rằng trong một số trường hợp, không phải tất cả tin nhắn ZMQ đã gửi đều được bên kia nhận được. Điều thậm chí còn kỳ lạ hơn là thậm chí sử dụng IPC Điều này cũng xảy ra với giao thức mà tôi cho là rất đáng tin cậy.

Lý do tại sao tin nhắn đã gửi không được gửi nhưng không có lỗi xảy ra là gì?

Đây là một ví dụ về mã khách hàng:

#mỉa mai
lớp đáng tin cậyClient(đối tượng):
def _reconnect(tự):
nếu self.socket:
self.socket.close()
self.socket = Không

self.socket = self.context.socket(zmq.REQ)
self.socket.connect(self.server_url)

# Cho máy chủ 2 giây để phản hồi
self.socket.RCVTIMEO = 2000
self.socket.SNDTIMEO = 2000

self.socket.LINGER = 3

def __init__(self, server_url=Không, server_name=Không):
self.socket = Không
self.server_url = server_url

nếu server_name là Không có:
self.server_name = server_url
khác:
self.server_name = tên_máy chủ

self.lock = threading.Lock()
self.context = zmq.Context()

self._reconnect()

thông điệp def(tự, tin nhắn):
raw_out = bãi chứa (tin nhắn)

# gửi
self.lock.acquire()
thử:
self.socket.send(
thô_out,
sao chép=Đúng
)
ngoại trừ zmq.ZMQError như cũ:
log.Exception(ex, '%s: không gửi được', self.server_name)
self.lock.release()
nâng cao CommunicationError('không gửi được')

#nhận được
thử:
raw_in = self.socket.recv()
ngoại trừ zmq.ZMQError như cũ:
log.Exception(ex, '%s: không nhận được', self.server_name)
nâng cao CommunicationError('không nhận được')
Cuối cùng:
self.lock.release()

msg_in = tải(raw_in)

trả lại tin nhắn_in

câu trả lời hay nhất

Tôi không quen với giao thức IPC, nhưng tôi đã sử dụng ZMQ/TCP một cách rộng rãi.

Nếu bạn sử dụng đúng cách, ngay cả chế độ ZMQ REQ/REP dựa trên TCP đơn giản nhất cũngVà sẽ không bao giờ hủy tin nhắn. Nó có thể bị treo vô thời hạn nếu kết nối mạng hoặc điểm cuối từ xa của bạn bị lỗi, nhưng nó sẽ không bao giờ bị lỗi âm thầm. Một số ổ cắm được thiết kế để loại bỏ tin nhắn trong một số trường hợp nhất định. Ví dụ: một số có thể gửi tin nhắn khi đạt đến HWM.

Giới thiệu về python - Độ tin cậy của ZeroMQ? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/18236368/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress