2014-10-10 2 views
22

Я только что прочитал это post, и я действительно понимаю, в чем разница. Но все же в голове у меня вопрос. Может/Должен ли я использовать его в том же приложении или на сайте? Скажем, я хочу, чтобы AngularJs получал контент и обновлял мою страницу, подключаясь к REST api и всему этому. Но помимо этого я также хочу чат в реальном времени или запускать события на других клиентах, когда есть обновление или полученное сообщение.AngularJS и WebSockets за пределами

Угловая поддержка? Или мне нужно использовать что-то вроде Socket.io для запуска этих событий? Имеет ли смысл использовать и то, и другое? Если кто-то может мне помочь или указать на хорошее чтение об этом, если есть цель использовать оба из них вместе.

Надеюсь, что я достаточно ясен. Спасибо за любую помощь.

ответ

16

Javascript поддерживает WebSocket, так что вам не нужен дополнительный клиентской среды, чтобы использовать его. Пожалуйста, посмотрите на этот $connection service, указанный в этом WebSocket based AngularJS application.

В принципе вы можете прослушивать сообщения:

$connection.listen(function (msg) { return msg.type == "CreatedTerminalEvent"; }, 
     function (msg) { 
      addTerminal(msg); 
      $scope.$$phase || $scope.$apply(); 
    }); 

Слушайте один раз (отлично подходит для запроса/ответа):

$connection.listenOnce(function (data) { 
     return data.correlationId && data.correlationId == crrId; 
    }).then(function (data) { 
     $rootScope.addAlert({ msg: "Console " + data.terminalType + " created", type: "success" }); 
    }); 

и отправлять сообщения:

$connection.send({ 
     type: "TerminalInputRequest", 
     input: cmd, 
     terminalId: $scope.terminalId, 
     correlationId: $connection.nextCorrelationId() 
    }); 

Обычно, так как Соединение WebSocket двунаправлено и has a good support, вы также можете использовать его для получения данных fr om сервер в модели запроса/ответа.Вы можете иметь две модели:

  • /Издатель Subscriber: сообщения, в которых клиент заявляет о своей заинтересованности в некоторых вопросах и установить обработчик для сообщений с этой темой, а затем сервер опубликовать (или толкать) всякий раз, когда это считает нужным.

  • Запрос/ответ: Если клиент отправляет сообщение с идентификатором requestID (или correIdI) и прослушивает один ответ для этого запроса.

Тем не менее, вы можете иметь оба, если хотите, и использовать REST для получения данных и WebSocket для получения обновлений.

На стороне сервера вам может потребоваться использовать Socket.io или любую другую структуру на стороне сервера, чтобы иметь бэкэнд с поддержкой WebSocket.

+1

Приятный пример, но обратите внимание, что $ connection не является частью углового, сервисы, начинающиеся с $, должны быть зарезервированы для углового api. – pdem

7

Как указано в answer в вашем связанном сообщении, Угловая в настоящее время не имеет встроенной поддержки для Websockets. Таким образом, вам нужно будет напрямую использовать API-интерфейсы Websockets или использовать дополнительную библиотеку, такую ​​как Socket.io.

Однако, чтобы ответить на вопрос о том, следует ли использовать как REST api, так и Websockets в одном приложении с угловым выражением, нет причин, по которым вы не можете иметь как стандартные запросы XmlHttpRequest для взаимодействия с REST api, используя $ http или другую библиотеку уровня данных, такую ​​как BreezeJS, для определенных функций, включенных в различные части приложения, а также использовать Wesockets для другой части (например, чат реального времени).

Угловой предназначен для оказания помощи при обработке этого типа сценария. Типичным решением было бы создать один или несколько контроллеров для обработки функциональности приложения и обновления вашей страницы, а затем создания отдельных служб или фабрик, которые инкапсулируют управление данными каждой из конечных точек данных (например, REST api и чат-сервер реального времени), которые затем вводятся в контроллеры.

Имеется большое количество информации об использовании угловых служб/фабрик для управления соединениями данных. Если вы ищете ресурс, который поможет вам определить, как построить приложение с угловым выражением и где будут входить сервисы данных, я бы рекомендовал проверить номер от John Papa, который включает раздел по Data Services.

Для получения дополнительной информации о предприятиях и услугах, вы можете проверить AngularJS : When to use service instead of factory

Смежные вопросы