Используя очереди сообщений POSIX вместо сокетов TCP - как установить “соединение”?

Как вы можете проверить исходный файл intobject.c , Python кэширует мелкие целые числа для эффективности. Каждый раз, когда вы создаете ссылку на небольшое целое число, вы ссылаетесь на кэшированное маленькое целое число, а не на новый объект. 257 не является маленьким целым числом, поэтому он вычисляется как другой объект.

Для этого лучше использовать ==.

14
задан John Zwinck 3 January 2009 в 22:48
поделиться

4 ответа

Я закончил тем, что реализовал его в основном, как я описал с несколькими улучшениями:

  • На шаге 2, я использовал GUID для имен очереди вместо того, чтобы включить PID клиента.
  • На шаге 4, я добавил отправку "принять" сообщения от сервера до клиента.
  • , Когда любая сторона хочет закончить коммуникацию, она отправляет сообщение "разъединения".

квитирование более просто, чем TCP, но кажется достаточным.

Что касается задержки: это намного лучше. Примерно на 75% меньше задержки с помощью очередей сообщений POSIX вместо TCP на той же машине. Мои сообщения находятся на порядке 100 байтов каждый.

6
ответ дан 1 December 2019 в 13:59
поделиться
  1. можно ли думать о лучшем способе сделать это?

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

  2. Вы видите какие-либо потенциальные проблемы с моим методом?

    очереди сообщений System V и первым прибыл, первым обслужен именованные каналы оба абсолютно прекрасны. Первым прибыл, первым обслужен каналы похожи на регулярные каналы, таким образом, можно читать () и запись () с минимальными изменениями кода. Очереди сообщений System V требуют помещения данных в структуру и вызов msgsnd (). Любой подход был бы прекрасен как бы то ни было.

  3. у Вас есть какие-либо другие мысли, приблизительно включая вероятность, что использование очередей сообщений вместо TCP на той же машине на самом деле улучшит производительность (задержка)?

    Мои другие мысли - то, что, поскольку Вы сказали, необходимо разработать технику, таким образом, у каждого клиента есть уникальный идентификатор. Один подход должен был бы добавить pid к структуре, через которую Вы передаете или согласовывать уникальный идентификатор с родителем / ведущее устройство вначале. Другая вещь отметить состоит в том, что преимущество очередей сообщений System V - то, что Вы прислушиваетесь к "выборочным" сообщениям, таким образом, Вы могли идеально использовать одну очередь от сервера до всех клиентов с каждым клиентом, ожидающим различного сообщения.

    я понятия не имею, о котором техника дает Вам самую оптимальную пропускную способность в Вашем программном обеспечении. Действительно не могло бы стоить использовать очереди сообщений System V, но только можно принять то решение.

Philluminati

7
ответ дан 1 December 2019 в 13:59
поделиться

Как Вы делали это, когда выбор () не работает над очередями сообщений? Что это Sys V или POSIX? Почему прилагают дополнительные усилия в создании GUID к справочной таблице PID, когда PID, как гарантируют, будет уникален, и устройство хранения данных действительно ли меньшего размера (целое число)?

/ цвет лица /

0
ответ дан 1 December 2019 в 13:59
поделиться

Я встречал аналогичную проблему, я разрабатываю приложение для работы в реальном времени и нуждаюсь в методе IPC с аналогичной функциональностью сокетов и минимальной задержкой.

Вы сравнивали свой POSIX-MQ на основе решение с локальными сокетами UNIX или только сокетами TCP?

Спасибо

1
ответ дан 1 December 2019 в 13:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: