程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了x秒/首次尝试失败的响应后,socket.io停止重新发射事件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决x秒/首次尝试失败的响应后,socket.io停止重新发射事件?

开发过程中遇到x秒/首次尝试失败的响应后,socket.io停止重新发射事件的问题如何解决?下面主要结合日常开发的经验,给出你关于x秒/首次尝试失败的响应后,socket.io停止重新发射事件的解决方法建议,希望对你解决x秒/首次尝试失败的响应后,socket.io停止重新发射事件有所启发或帮助;

当开源库的所有其他功能都失败时,您可以研究代码并找出可以解决的内容。在花了一些时间使用socket.io源代码执行此操作之后…

问题的症结似乎是这样的代码,这里在socket.emit()

  if (this.connected) {
    this.packet(packet);
  } else {
    this.sendBuffer.push(packet);
  }

如果未连接套接字,则通过发送的所有数据都将.emit()缓存在中sendBuffer。然后,当套接字再次连接时,我们看到以下内容:

Socket.prototype.onconnect = function(){
  this.connected = true;
  this.disconnected = false;
  this.emit('connect');
  this.emitBuffered();
};

Socket.prototype.emitBuffered = function(){
  var i;
  for (i = 0; i < this.receiveBuffer.length; i++) {
    emit.apply(this, this.receiveBuffer[i]);
  }
  this.receiveBuffer = [];

  for (i = 0; i < this.sendBuffer.length; i++) {
    this.packet(this.sendBuffer[i]);
  }
  this.sendBuffer = [];
};

因此,这充分解释了为什么它会在连接断开时缓冲所有发送的数据,然后在重新连接时将所有数据发送出去。

现在,关于如何防止它发送缓冲的数据,这是一个理论,我将在今晚晚些时候有更多时间尝试进行测试。

看起来有两件事给他们带来了机会。套接字connect在发送缓冲的数据之前通知事件,并且sendBuffer是套接字的公共属性。因此,看起来您可以在客户端代码中执行此操作(在连接时清除缓冲区):

// clear prevIoUsly buffered data when reconnecTing
socket.on('connect', function() {
    socket.sendBuffer = [];
});

我刚刚对其进行了测试,并且效果很好。我有一个客户端套接字,它每秒向服务器发送增加的计数器消息。我关闭服务器5秒钟,然后在添加此代码之前将服务器重新启动,所有排队的消息都到达了服务器。没有任何遗漏。

当我在上面添加三行代码时,在服务器关闭时发送的任何消息都不会发送到服务器(从技术上讲,它们在发送之前会从发送缓冲区中清除)。有用。

仅供参,另一种可能性.emit()是在未连接套接字时不调用。因此,您可以创建自己的函数或方法,这些函数或方法仅.emit()在实际连接套接字时才会尝试执行,因此什么也不会进入sendBuffer

Socket.prototype.emitWhenConnected = function(msg, data) {
    if (this.connected) {
        return this.emit(msg, data);
    } else {
        // do nothing?
        return this;
    }
}

或者,更危险的是,您可以重写.emit()以使其以这种方式工作(不是我的建议)。

解决方法

我注意到,每当我的服务器脱机时,只要我将其切换回在线状态,它都会收到大量的套接字事件,这些事件是在服务器关闭时触发的。(现在已过时的事件)。

在x秒钟未收到响应之后,是否有办法阻止socket.io重新发送事件?

大佬总结

以上是大佬教程为你收集整理的x秒/首次尝试失败的响应后,socket.io停止重新发射事件全部内容,希望文章能够帮你解决x秒/首次尝试失败的响应后,socket.io停止重新发射事件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: