Python / Twisted - отправка в конкретный объект сокета? - PullRequest
1 голос
/ 20 января 2009

У меня есть процесс "менеджер" на узле и несколько рабочих процессов. Менеджер - это фактический сервер, который содержит все соединения с клиентами. Менеджер принимает все входящие пакеты и помещает их в очередь, а затем рабочие процессы извлекают пакеты из очереди, обрабатывают их и генерируют результат. Они отправляют результат обратно менеджеру (помещая их в другую очередь, которую читает менеджер), но здесь я застреваю: как отправить результат в определенный сокет? Когда дело касается обработки пакетов в одном процессе, это легко, потому что, когда вы получаете пакет, вы можете ответить на него, просто захватив объект «transport» в контексте. Но как мне сделать это с помощью метода, который я использую?

1 Ответ

3 голосов
/ 20 января 2009

Похоже, вам может понадобиться сохранить ссылку на транспорт (или протокол) вместе с байтами, которые только что поступили по этому протоколу в вашем объекте 'события'. Таким образом, ответы, которые поступают на соединение, выходят на том же соединении.

Если что-то не нужно обрабатывать последовательно, возможно, вам следует подумать о настройке функторов, которые могут обрабатывать данные параллельно, чтобы устранить необходимость в очереди. Просто помните, что вам нужно будет защитить критические разделы вашего кода.

Edit: Судя по вашему другому вопросу об оценке дизайна вашего сервера, может показаться, что параллельная обработка может оказаться невозможной для вашей ситуации, поэтому мое первое предложение остается в силе.

...