У меня есть клиент-серверное приложение, которое я сделал с использованием сокетов.
Дело в том, что когда я посылаю команду, запрашивающую некоторую информацию, и жду ответа, я блокирую, пока не придет ответ. Это затрудняет реализацию двунаправленных запросов / ответов.
Позвольте мне объяснить, используя один пример:
Клиент может перечислять файлы в каталоге сервера, поэтому я делаю что-то подобное в коде:
Код клиента:
1- Отправить запрос команды: LS /
2- Блоки, ожидающие ответа LS.
3- Получить список файлов.
Причина, по которой я это сделал, заключается в том, что Клиент может передавать файл, поэтому я делаю:
1- Отправьте запрос на передачу файла.
2- Блокирует чтение (), ожидая, если сервер принимает
3- Только если это так, отправьте файл.
Так что все было хорошо, пока мне не пришлось добавить серверу возможность запрашивать что-либо.
В моем коде клиент может запросить что угодно и получить блокировку в ожидании ответа.
Затем сервер может отправить любую команду запроса, которая не будет иметь смысла для ответа, которого ожидает клиент. Это могло бы испортить разговор.
Одно из решений, которое я принял, - никогда не блокировать ответ.
Я отправляю команду запроса, а затем возвращаюсь, чтобы дождаться ЛЮБОГО запроса или ответа от сервера. Если ответ приходит, я отправляю файл.
Так что дело в том, нужно ли мне добавлять идентификаторы в каждой паре запрос / ответ, чтобы знать, какой ответ на какой запрос?
PS: Я довольно потерян в том, как спроектировать сетевой разговор между хостами, и никогда не читал книгу о шаблонах разработки для сетевых приложений.
PS2: простите мой плохой английский;)