Я уже давно использую этот сокет-сервер Twisted Python TCP, и теперь он начинает меня добираться. Моя проблема в том, что у меня есть 350+ (дайте или принимайте в зависимости от дня и часа) клиентов сразу, а иногда у меня будет большой лаг. В промежутке я имею в виду иногда, когда в «комнате» (в основном это аватарный чат, у пользователей есть запасы, друзья, дома и т. Д.) С любым количеством пользователей (как правило, таких, как 10+ пользователей в комнате) 2-5 секунд «зависает» каждую минуту или около того. Замерзает, я имею в виду, что никакие пакеты не отправляются, и никто не может видеть, как кто-то перемещает их характер, разговаривает или что-то еще. После его размораживания это похоже на то, что все пакеты сразу отправляются сразу, и вы видите сообщения всех и все.Python Twisted Socket Server
Мой сокет Sever был основан от этого: https://github.com/jesstess/twisted-network-programming-essentials-examples/blob/master/Chapter11-Testing/chatserver.py
мне интересно, что я могу сделать, чтобы предотвратить задержку. Я думал о многопоточности, но как бы мне это сделать в чем-то таком, как приведенный выше пример? Большинство клиентов, которых я когда-либо имел в сети, были 451 несколько недель назад, но я не думаю, что это произойдет в ближайшее время.
Если вы смущены моим вопросом - в основном я спрашиваю, как заставить сервер лучше обрабатывать ~ 350 клиентов и предотвращать задержки/замораживания для всех клиентов в комнате.
Edit: В отличие от этого примера, я добавил это в нижней части:
ServerCL = GameServer(sys.argv[1])
reactor.listenTCP(int(config.get('GameServer1_' + str(sys.argv[1]), 'port')), ServerCL)
reactor.listenTCP(int(config.get('GameServer2_' + str(sys.argv[1]), 'port')), ServerCL)
reactor.run()
Я верю, что twisted уже * многопоточен под капотом, поэтому я не уверен, что вы получите много от этого (пожалуйста, не стесняйтесь проверить ... прошло некоторое время с тех пор, как я играл с ним). Изоляция «почему» это медленный, безусловно, правильный подход ... – FuzzyBunnySlippers
скрученный не является резьбовым, а основан на событии. Это означает, что все работает в одном потоке, и если обработчик событий блокирует или занимает слишком много времени, все соединения будут страдать. –
Возможно ли, что, возможно, использование Twisted в качестве базы серверов сокетов сделает лучше? Может быть, с помощью обычного сокета lib? – 67898g8