У меня есть клиентские и серверные программы, которые теперь общаются через TCP. Вместо этого я пытаюсь использовать очереди сообщений POSIX (в случаях, когда клиент и сервер находятся на одной машине, конечно). Я надеюсь, что это улучшит производительность (особенно за счет уменьшения задержки).
Я разработал большую часть этого, но не уверен в одном: как установить «соединение». Сервер принимает подключения от нескольких клиентов одновременно, поэтому я испытываю желание эмулировать процесс установки TCP-соединения следующим образом:
- Сервер открывает очередь с известным именем и непрерывно читает из нее (он может использовать
select(2)
как с TCP).
- Клиент открывает три очереди: две с произвольными именами (включая некоторую уникальность, например PID, чтобы избежать коллизий), и одну с хорошо известным именем, используемым сервером.
- Клиент отправляет сообщение «connect» в очередь сервера, включая имена очередей клиента (одно предназначено для трафика клиент-сервер, а другое для обратного).
- Сервер открывает очереди, указанные в сообщении подключения клиента, и начинает читать (выбирать) из сообщения клиент-сервер.
- Клиент закрывает очередь сервера с известным именем. Двусторонняя связь осуществляется с использованием двух очередей, названных клиентом (по одной для каждого направления).
Возможно, вы видите, как эта схема похожа на обычный метод TCP, и это не случайно. Тем не менее, я хотел бы знать:
- Можете ли вы придумать лучший способ сделать это?
- Видите ли вы какие-либо потенциальные проблемы с моим методом?
- Есть ли у вас какие-либо другие мысли, в том числе о вероятности того, что использование очередей сообщений вместо TCP на одной и той же машине действительно повысит производительность (задержку)?
Имейте в виду, что раньше я не использовал очереди сообщений POSIX (некоторое время назад я использовал IBM WebSphere MQ, но это несколько иное). Платформа Linux.