Неблокирующий вызов RPC, используя gSoap
Возможно ли это?
Я знаю, я могу сделать одностороннюю асинхронную связь, но я хочу, чтобы она была двусторонней.
Другими словами, я спрашиваю о шаблоне запроса/ответа, но не -блоке, как описано здесь (опция < rd)
Связано с Асинхронное, подтвержденное, двухточечное соединение с использованием gSoap - Я хотел бы сделать асинхронный (n)ack
к югу >
Ответы
Ответ 1
Я думаю, что это невозможно при базовом использовании,
Единственный способ сделать это двумя способами - это ответ "результаты вызова"
Но вы можете использовать небольшой трюк
1] Создайте еще один сервер2 на стороне клиента и вызовите этот сервер2 с сервера
Или если это не вы можете сделать через Интернет из-за NAT/firewall и т.д.
2] повторно создайте свой api, чтобы клиент снова вызывал сервер на основе ответов на сервер.
Ответ 2
У вас может быть клиент-сервер с обоих концов. Например, вы можете иметь клиентский сервер в системе 1 и системе 2. (Я указываю отправителя как получателя и получателя в качестве сервера). Вы отправляете асинхронное сообщение от клиента sys1 на сервер sys 2. При получении сообщения из sys1 вы можете отправить ответ async от клиента sys 2 на сервер sys1. Вот как вы можете сделать асинхронную двухстороннюю связь.
Ответ 3
Я думаю, вам нужно будет запустить вызов блокировки в отдельном потоке, как описано здесь: https://developer.nokia.com/Community/Wiki/Using_gsoap_for_web_services#Multithreading_for_non-blocking_calls
Ответ 4
Вам нужен способ связать запросы с ответами. В нормальном RPC они связаны временной шкалой: ответ следует за ответом, прежде чем может произойти другой ответ.
Общим решением является отправка ключа вместе с запросом. Ответ ссылается на тот же ключ. Если вы это сделаете, двусторонний неблокирующий RPC станет частным случаем двух односторонних неблокирующих RPC-соединений. Ключ обычно называется чем-то вроде request-id или noince.