фабрика angularjs для веб-сокетов html5 с инициализацией сокета с переданным URL - PullRequest
0 голосов
/ 30 ноября 2018

Как создать фабрику AngularJS для HTML5 WebSockets?

Мой сервер обслуживает подключения к веб-сокетам по нескольким путям следующим образом:

ws://192.168.225.59:8080/chat/
ws://192.168.225.59:8080/notif/
ws://192.168.225.59:8080/something/

Я хотел бы иметь фабрику <b>Socket</b>, котораяможет принять любой путь из вышеупомянутого и открыть соединение через веб-сокет.

Мой подход:

socket.service.js


angular.
  module('core.socket').
  factory('Socket', [function() {
      var stack = [];
      var onmessageDefer;
      var self = this;

      var socket = {
          ws: new WebSocket("ws://192.168.225.59:8080/"),
          send: function(data) {
              data = JSON.stringify(data);
              if (socket.ws.readyState == 1) {
                  socket.ws.send(data);
              } else {
                  stack.push(data);
              }
          },
          onmessage: function(callback) {
              if (socket.ws.readyState == 1) {
                  socket.ws.onmessage = callback;
              } else {
                  onmessageDefer = callback;
              }
          }
      };

      socket.init = function(url){
        socket.ws.close();
        socket.ws = new WebSocket(url);
      }
      socket.ws.onopen = function(event) {
          for (i in stack) {
              socket.ws.send(stack[i]);
          }
          stack = [];
          if (onmessageDefer) {
              socket.ws.onmessage = onmessageDefer;
              onmessageDefer = null;
          }
      };
      return socket;
  }]);


Здесь я бы позвонил Socket.init("ws://192.168.225.59:8080/something/") из моего контроллера, который отключается от существующего соединения и устанавливает это новое соединение.Но этот подход каким-то образом блокирует получение сообщений.

Любая помощь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...