Я пишу многопроцессорный сервер на Python для получения данных от нескольких клиентов. Когда новое соединение установлено, передача данных сначала идет нормально. Новый процесс создается для получения и обработки потока данных. Если клиент активно отключает сервер, сокет закрывается и процесс завершается.
До сих пор все в порядке. Однако, когда передача данных на некоторое время приостанавливается, функция recv () отключается и больше не может получать новые данные. Тем не менее, соединение выглядит хорошо на основе возвращаемого значения recv () . Несмотря на то, что процесс все еще существует, клиент должен повторно подключить сервер, что заставляет сервер создавать новый процесс для него.
Это основной код моего сервера:
def main():
with socket(AF_INET, SOCK_STREAM) as s:
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
address = ('', 7788)
s.bind(address)
s.listen()
while True:
print('WAITING FOR CONNECTIONS...')
newConn, newAddr = s.accept()
with newConn:
print('%s CLIENT ACCEPTED...' % newAddr[0])
p = Process(target=recv, args=(newConn, newAddr))
p.start()
def recv(newConn, newAddr):
while True:
recvData = newConn.recv(1024)
if len(recvData) > 0:
dataprocessing(recvData)
else:
print('%s CLIENT DISCONNECTED' % newAddr[0])
break
Я надеюсь, что каждое соединение может оставаться в живых как можно дольше, чтобы получать новые данные от клиента в любое время. Почему мой сервер не работает? Стоит отметить, что когда соединение казалось мертвым, оно не получало новых данных для обработки и не печатало информацию «CONNECTION DISCONNECTED». Почему это?