AngularJS и WebSockets за пределами
Я просто прочитал этот пост, и я понимаю, в чем разница. Но все же в голове у меня вопрос. Может/Должен ли я использовать его в том же приложении или на сайте? Скажем, я хочу, чтобы AngularJs получал контент и обновлял мою страницу, подключаясь к REST api и всему этому. Но помимо этого я также хочу чат в реальном времени или запускать события на других клиентах, когда есть обновление или полученное сообщение.
Поддерживает ли Angular это? Или мне нужно использовать что-то вроде Socket.io для запуска этих событий? Имеет ли смысл использовать и то, и другое?
Если кто-то может мне помочь или указать на хорошее чтение об этом, если есть цель использовать их вместе.
Надеюсь, я достаточно ясен. Спасибо за любую помощь.
Ответы
Ответ 1
Javascript поддерживает WebSocket, поэтому для его использования не требуется дополнительная клиентская среда. Пожалуйста, посмотрите на $connection service, объявленный в этом
Слушайте один раз (отлично подходит для запроса/ответа):
$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 двунаправлено и , вы также можете использовать его для получения данных с сервера в запросе/модель ответа. У вас могут быть две модели:
Издатель/Подписчик. Когда клиент заявляет о своей заинтересованности в некоторых темах и устанавливает обработчики для сообщений с этой темой, а затем сервер публикует (или нажимает) сообщения всякий раз, когда он считает нужным.
Запрос/ответ. Если клиент отправляет сообщение с идентификатором requestID (или correId) и прослушивает один ответ для этого запроса.
Тем не менее, вы можете иметь оба, если хотите, и использовать REST для получения данных и WebSocket для получения обновлений.
На стороне сервера вам может потребоваться использовать Socket.io или любую другую структуру на стороне сервера, чтобы иметь бэкэнд с поддержкой WebSocket.
Ответ 2
Как отмечено в ответе в вашем связанном сообщении, Angular в настоящее время не имеет встроенной поддержки для Websockets. Таким образом, вам нужно будет напрямую использовать API-интерфейсы Websockets или использовать дополнительную библиотеку, такую как Socket.io.
Однако, чтобы ответить на ваш вопрос о том, следует ли использовать как REST api, так и Websockets в одном приложении Angular, нет причин, по которым вы не можете иметь как стандартные запросы XmlHttpRequest для взаимодействия с REST api, используя $http или другую библиотеку уровня данных, такую как BreezeJS, для определенных функций, включенных в различные части приложения, а также использовать Wesockets для другой части (например, чат реального времени).
Angular предназначен для помощи при работе с этим типом сценария. Типичным решением было бы создать один или несколько контроллеров для обработки функциональности приложения и обновления вашей страницы, а затем создания отдельных служб или фабрик, которые инкапсулируют управление данными каждой из конечных точек данных (например, REST api и чат-сервер реального времени), которые затем вводятся в контроллеры.
Имеется много информации об использовании Angular сервисов/фабрик для управления соединениями данных. Если вы ищете ресурс, который поможет вам в построении приложения Angular и где будут использоваться службы данных, я бы рекомендовал проверить John Papa AngularJS Styleguide, который включает раздел Сервисы данных.
Для получения дополнительной информации о фабриках и услугах вы можете проверить AngularJS: когда использовать службу вместо factory