2015-02-05 4 views
0

Я хотел бы реализовать UDP-сервер с Python.Многоклиентский UDP-сервер python

Я хочу быть в состоянии ждать, пока некоторые клиенты смогут одновременно общаться и общаться с другими.

Я пытался использовать реализацию SocketServer

import SocketServer 

class MyUDPHandler(SocketServer.BaseRequestHandler): 

    def handle(self): 
     data = self.request[0].strip() 
     socket = self.request[1] 
     print("{} wrote:".format(self.client_address)) 
     print("data -> ", data) 

     socket.sendto(data.upper(), self.client_address) 

if __name__ == "__main__": 
    HOST, PORT = "localhost", 9999 
    server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler) 
    server.serve_forever() 

С этой реализацией, я могу отправить данные от различных клиентов к этому серверу.

Чтобы было ясно, что я хочу сделать, это перейти в другую функцию, когда клиент отправил данные UDP на сервер, чтобы иметь возможность общаться с ним. Но в то же время я все еще хочу, чтобы другие клиенты могли отправлять данные UDP. Думаю, многопоточность будет решением?

Я не уверен, чтобы быть ясно ...

ответ

2

UDP не требует соединения. Таким образом, вы можете получать сообщения от нескольких клиентов только с одним SocketServer, который у вас есть, и отличать клиентов друг от друга с помощью client_address. Вам не нужны потоки или несколько процессов.

Поскольку это сервер чата, исходящие сообщения, вероятно, всегда в ответ на входящие из них, но если вы хотите, чтобы иметь возможность рассылать сообщения, а также, вы должны заменить serve_forever() с handle_request() и установить self.timeout в __init__(). Таким образом, вы можете проверить, нужно ли периодически выполнять дополнительные действия, например. раз в минуту вы можете посылать пульс или что-то еще.

Смежные вопросы