Многопользовательский RPC
У меня есть маршрутизатор, сервер и несколько клиентов. Сервер регистрирует методы в маршрутизаторе, а клиенты успешно вызывают методы и получают результат. В некоторых случаях мне нужен сервер, чтобы спросить определенного клиента о чем-то. У меня уже есть sessionId
с помощью WampInvocationContext.Current.InvocationDetails
, но я не знаю, как клиенты должны регистрировать свои методы, и я не знаю, как вызывать их с сервера.
Я посмотрел в документации, но не повезло. Действительно ли wamp-proto поддерживает такую вещь? Если так, есть какие-нибудь указатели?
1 ответ
Если я правильно понимаю, вы хотите, чтобы несколько клиентов зарегистрировали одну и ту же процедуру, а затем вызвали определенные из них.
Это невозможно с WAMP, использующим тот же URI для процедуры.
Для того, что вы хотите сделать, предполагаемый способ заключается в использовании URI, которые содержат идентификатор клиента, например, если ваша процедура "com.example.calculate_load", клиенты зарегистрируют "com.example.client_1.calculate_load" (или "com.example.calculate_load.client_1"), и вы будете обращаться к клиентам через URI процедуры.
Несколько клиентов могут зарегистрировать одну и ту же процедуру под одним и тем же URI, но это предназначено для масштабирования процедур или для использования горячих резервов. Маршрутизатор решает, какому клиенту позвонить, основываясь на общей стратегии, в соответствии с которой клиенты зарегистрированы (например, циклический перебор). Смотрите http://crossbar.io/docs/Shared-Registrations/