Правильный способ реализации клиента Direct Connect в Twisted? - PullRequest
3 голосов
/ 07 декабря 2009

Я работаю над написанием Python-клиента для P2P-сетей Direct Connect. По сути, он работает, подключаясь к центральному серверу и отвечая на запросы других пользователей, которые ищут файлы.

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

Каков наилучший способ обработки этих соединений с другими клиентами? В настоящее время я использую один Twisted реактор для подключения к серверу, но лучше ли иметь несколько реакторов, по одному на клиента, каждый из которых работает в отдельном потоке? Или было бы лучше иметь совершенно отдельный скрипт Python, который выполняет соединение с клиентом?

Если есть какое-то другое решение, о котором я не знаю, я бы с удовольствием его услышал. Я новичок в программировании с Twisted, поэтому я открыт для предложений и других ресурсов.

Спасибо!

1 Ответ

3 голосов
/ 07 декабря 2009

Не зная всех деталей протокола, я все равно рекомендовал бы использовать один реактор - реактор хорошо масштабируется вполне (особенно передовые, такие как PollReactor), и таким образом вы избежите накладные расходы, связанные с потоками (в конце концов, именно так Twisted и другие асинхронные системы получают фундаментальное повышение производительности, избегая таких накладных расходов). На практике потоки в Twisted полезны, главным образом, когда вам необходимо подключиться к библиотеке, функции которой могут блокировать вас.

...