Разумный дизайн использования 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-способ присоединения обратного вызова к каждой функции был бы намного приятнее, но я хочу воспользоваться преимуществами веб-сокетов (например, меньше накладных расходов для быстрой связи).

0 ответов

Другие вопросы по тегам