Разумный дизайн использования socket.io для RPC
Я создаю веб-приложение, которое использует socket.io для запуска удаленных вызовов процедур, которые передают данные, специфичные для сеансов, обратно клиенту. Поскольку мое приложение становится все больше и больше пользователей, я хотел проверить, является ли мой дизайн разумным.
Сервер, который получает сообщения websocket и запускает RPC, выглядит примерно так:
s.on('run', function(input) {
client.invoke(input.method, input.params, s.id, function(error, res, more) {
s.emit('output', {
method: input.method,
error: error,
response: res,
more: more,
id: s.id
});
});
});
Однако это означает, что клиент должен сначала emit
вызов метода, а затем прослушивание всех возвращаемых методов и получение правильного возвращаемого значения:
socket.on('output', function(res) {
if (res.id === socket.sessionid) {
if (!res.error) {
if(res.method === 'myMethod') {
var myResponse = res.response;
// Do more stuff with my response
});
}
}
});
Это начинает казаться грязным дизайном, когда я добавляю все больше и больше функций... Есть ли лучший способ сделать это?
Традиционный AJAX-способ присоединения обратного вызова к каждой функции был бы намного приятнее, но я хочу воспользоваться преимуществами веб-сокетов (например, меньше накладных расходов для быстрой связи).