Как реализовать передачу сообщений POSIX в QT с использованием QThreads? - PullRequest
0 голосов
/ 24 апреля 2011

Я пишу клиент-серверное приложение, которое должно работать с IPC.Я разработал программу с использованием TCPSockets, но сейчас хотел бы попытаться использовать очереди сообщений.Сервер просто работает, пока клиент не подключится.После подключения клиент может отправить серверу любое целое число, которое затем отображается на сервере.Несколько клиентов могут подключаться к серверу и отправлять ему целые числа, которые видны для сервера и подключенных клиентов.

Без использования сокетов, как мне подойти к реализации этого?Может быть любое количество клиентов, подключающихся.Я думал об использовании QThread для обработки опроса, чтобы увидеть, подключен ли клиент (?), Но это то, где я застрял - как вы говорите, клиент подключен?

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

См. Этот вопрос, который я задал относительно установления «соединения» с использованием очередей сообщений POSIX: Использование очередей сообщений POSIX вместо сокетов TCP - как установить «соединение»?

Я все заработал, но в итоге разработал поддержку доменных сокетов Unix, что дало мне ускорение с MQ, но без сложности реализации. Теперь по какой-то причине вы сказали в своем вопросе «без использования сокетов», поэтому я не знаю, сможете ли вы использовать доменные сокеты Unix для замены TCP вместо использования MQ, но если вы хотите попробовать, я сделаю рекомендовать его. Доменные сокеты Unix поддерживают работу с установлением соединения (а также без установления соединения), поэтому ваши вопросы о том, как узнать, когда соединение установлено или разорвано, решаются без сложности приложения (так же, как с TCP).

0 голосов
/ 24 апреля 2011

Это не особенно хороший вариант использования для MQ, но вы можете это сделать.

Нет реального понятия "соединение" с очередями сообщений.Концептуально они больше похожи на почтовые ящики.Ваш клиент отправляет письмо, а через некоторое время - миллисекунды в дни, в зависимости от того, как устроен сервер, - сервер решает открыть сообщение и обработать его.

В вашем случае вы можете рассмотреть вопрос об известной очереди (клиентызнать путь к MQ), на который клиенты могут отправлять сообщения.Каждый клиент создаст собственную очередь для получения ответов.Сообщение на сервер может содержать путь к очереди, из которой клиенты будут читать свои ответы.Сервер отвечает целым числом в очередь клиента.Это будет работать, но это не то, что вы хотите масштабировать до какой-либо степени.

И у клиента, и у сервера есть пара опций для чтения своих очередей.Они могут блокироваться в mq_receive, пока не будет что почитать.Они могут опрашивать, используя mq_timedreceive.Они могут использовать mq_notify для получения сигнала (или создания потока), когда в очереди есть что-то новое.Или в Linux они могут использовать mqd_t в операторе select (или аналогичном).

...