【问题标题】:Socket.io - angular.js. - always disconnected with "ping timeout"Socket.io - angular.js。 - 总是与“ping 超时”断开连接
【发布时间】:2021-04-05 12:27:04
【问题描述】:

尝试使用 Angular js + socket.io 连接到服务器(Node.js - nestsJS)

我有 React 和 Angular 应用程序 在反应应用程序中一切正常

在 Angularjs 中,我总是得到“ping 超时”,然后它尝试重新连接 - 在服务器上我看到了连接并且它通过了身份验证流程。

当我进入网络选项卡(WS)时,我在后端进行了身份验证后得到了我的事件,所以它看起来像是一个客户端问题 所以每隔约 30 秒控制台输出断开连接 + 原因“ping 超时”

Angular 代码-socket 服务

        .factory('socket', socket);

    socket.$inject = ["$rootScope"];

    function socket($rootScope) {

        const options = {
                    transports:['websocket'],
                    // allowUpgrades: false,
      
                    query: {
                        token : "token",
                    },
                    forceNew: true
                }
        var socket = io.connect('/', { ...options, path: `/socket.io` });

        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);
                        }
                    });
                })
            }
        };

控制器:

     socket.on('connect', function (data) {
            console.log("connect")

        });
        socket.on('connection', function (data) {
            console.log("connect")

        });
        socket.on('disconnect', function (data) {
            console.log("disconnect")
            console.log(data)
        });

        socket.on('events-test', function (data) {
            console.log("test")
            console.log(data)
        })

在网络选项卡中,我可以看到“events-test”事件,它将创建一个新的“ws”选项卡 evrey 重新连接

【问题讨论】:

  • 你在客户端和/或nodeJs服务器上使用什么版本的socket.io?
  • @MisterniceGuy 嗨,感谢服务器->(使用基于 socket.io 的@nestjs/platform-socket.io 6.11.11": "2.3.0")客户端- Socket.IO v4.0.0
  • 我也尝试了 3.1.3 版本的客户端得到相同的 ping 超时

标签: angularjs socket.io


【解决方案1】:

通过将socket-io客户端版本更改为2.3.0解决 在客户端使用 socketio 版本 2 来匹配服务器。 3和4与服务器v2不兼容

【讨论】:

  • 我在使用例如客户端 > 3.x 和服务器 2.x 时遇到了类似的问题。我最终都去了 4.x。主要的变化是你会在你的客户端上遇到 cors 问题,但这是一个简单的解决方法,而且有些东西已经贬值了。
猜你喜欢
  • 2018-12-08
  • 2016-07-08
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
相关资源
最近更新 更多