Я работаю на Raspberry Pi 5 (debian 12 — книжный червь)
Я хочу быть уверен, что мой клиент повторно подключится, если мой сервер остановится и перезапустится. Когда я сначала запускаю сервер, он работает нормально. Но если я сначала запущу клиент или сервер остановится и перезапустится, клиент не подключится.
Я надеялся, что он может автоматически повторно подключиться, но у меня это не сработало. Я продолжаю пытаться отправить и получаю
Операцию невозможно выполнить в текущем состоянии
даже при перезапуске сервера.
Код: Выделить всё
import time
import zmq
class Test:
def __init__(self):
context = zmq.Context()
self._socket = context.socket(zmq.REQ)
# Suggested settings for auto-reconnect
self._socket.setsockopt(zmq.LINGER, 0)
self._socket.setsockopt(zmq.RECONNECT_IVL, 1000)
self._socket.setsockopt(zmq.RECONNECT_IVL_MAX, 5000)
self._socket.connect(f"tcp://localhost:5555")
def request(self, request: str) -> str:
try:
self._socket.send(request.encode())
# Get the reply.
if self._socket.poll(1000, zmq.POLLIN):
message = self._socket.recv()
else:
raise Exception("Machine control service is not responding")
return message.decode()
except Exception as ex:
print("ERROR", ex)
def run():
control = Test()
while True:
reply = control.request("READALL")
print("Received reply:", reply)
time.sleep(1)
if __name__ == "__main__":
run()
Код: Выделить всё
def __init__(self):
self._connection_string = f"tcp://localhost:{SERVER_PORT}"
context = zmq.Context()
self._socket = context.socket(zmq.REQ)
self._socket_connected = False
self._gpio_input_states = ""
def _connect(self):
if not self._socket_connected:
print("connect")
self._socket.connect(self._connection_string)
self._socket_connected = True
print("connected!!!!!")
def _disconnect(self):
if self._socket_connected:
print("disconnect")
self._socket.disconnect(self._connection_string)
self._socket_connected = False
def request(self, request: str) -> str:
try:
self._connect()
self._socket.send(request.encode())
# Get the reply.
if self._socket.poll(1000, zmq.POLLIN):
message = self._socket.recv()
else:
raise Exception("Machine control service is not responding")
return message.decode()
except Exception as ex:
self._disconnect()
raise MachineControlInterfaceException(f"Failed to send request to machine control service. Reason: {ex}")
Подробнее здесь: https://stackoverflow.com/questions/797 ... -to-server
Мобильная версия