Подтвердить что ты не робот

AngularJS и WebSockets за пределами

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

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

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

4b9b3361

Ответ 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