Angularjs Запросы http медленные из-за socket.io - PullRequest
0 голосов
/ 05 апреля 2020

Надеясь, что кто-то мог испытать это раньше и может предложить решение. У меня есть приложение, которое работает на Express, Nodejs и сервере Socket.io с Angularjs внешним интерфейсом. Похоже, всякий раз, когда параллельно происходит запрос Angular http и событие socket.io, запрос http блокируется до тех пор, пока событие сокета не будет завершено. Как видите, данные размером от 5 до 15 КБ занимают более 15 секунд. Эта задержка в http-запросах происходит на локальном хосте, а также при прокси на сервере nginx в Windows / Linux и любой другой среде, которую я пробовал.

enter image description here

// Angular Factory

app.factory('socket',['$rootScope', function ($rootScope) {
    var socket = io.connect('', {
        path: static_path + '/socket.io',
        transports: ['websocket']
    });
    return {
        on: function (eventName, callback) {
            socket.on(eventName, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    callback.apply(socket, args);
                });
            });
        },
        emit: function (eventName, data, callback) {
            socket.emit(eventName, data, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    if (callback) {
                        callback.apply(socket, args);
                    }
                });
            })
        },
        disconnect: function(close){
            socket.disconnect(close);
        },
        removeAllListeners: function (eventName, callback) {
            socket.removeAllListeners(eventName, function() {
                var args = arguments;
                $rootScope.$apply(function () {
                    callback.apply(socket, args);
                });
            });
        }
    };
}])

И мой сервер express, socket.io настроен таким образом ...

// Express and Socket.io server

var express = require('express');
var app = express();

var http = require('http').createServer(app);
var Server = require('socket.io');

// $(staticPath) is just path variable
var io = new Server({
    path: `${staticPath}/socket.io`,
    transports: ['websocket']
  });

io.listen(http);

http.listen(8080);

Не имеет значения, использую ли я параметр транспортов или удаляю его

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