def _listen(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((self.host, self.port))
sock.listen(256)
self.slave_index = 0
slaves = []
def dispatch_command(cmd):
_send_obj(slaves[self.slave_index], cmd)
self.slave_index += 1
if self.slave_index == len(slaves):
self.slave_index = 0
def handle_slave(sock):
try:
while True:
self.event_queue.put_nowait(_recv_obj(sock))
except Exception as e:
logger.info("Slave disconnected")
slaves.remove(sock)
if self.slave_index == len(slaves) and len(slaves) > 0:
self.slave_index -= 1
try:
sock.close()
except:
pass
def listener():
while True:
_socket, _addr = sock.accept()
logger.info("Slave connected")
slaves.append(_socket)
gevent.spawn(lambda: handle_slave(_socket))
gevent.spawn(listener)
return dispatch_command
评论列表
文章目录