当前位置: 首页 > 知识库问答 >
问题:

套接字IO服务器重新启动导致重复客户端发出

贲言
2023-03-14
const app = express();
const port = process.env.PORT || 4000;
const server = app.listen(port, () => l(`Server started on port ${port}`));
const io = require('socket.io').listen(server);

app.get('/', (req, res) => {
   res.sendFile('/public/index.html', { root: __dirname });
});

io.on('connection', client => client.on('event', (msg) => console.log(msg));
const socket = io.connect('', { query: { path: window.location.pathname }, reconnect: false, forceNew: true });

$("body").on("click", "a", () => socket.emit('event', 'test'));

共有1个答案

公孙琛
2023-03-14

以下是解决方案:https://github.com/socketio/socket.io/issues/430#issuecomment-451130988

不要在connect或authenticated等操作中包装socket.on。

在我的示例中,我有一个用授权包装的“socket.on”。一旦客户机重新连接socket.on,服务器每次重新启动时socket.on就会叠加并倍增。

 类似资料:
  • 我有一个gRPC客户端,它使用两个bidi流。由于目前未知的原因,当我们每小时发送一次keepAlive ping时,两个流都会调用带有的onError。 为了处理重新连接,我在java伪代码中实现了以下重试机制。我将在评论中澄清任何必要的内容。 机制看起来是这样的: 虽然我们试图关闭旧的流,但在服务器端,我们看到2个HA节点上打开了2个连接。我对服务器端没有任何控制权,我只需要在客户端处理重新连

  • 问题内容: 我有一个RMI服务器和一个桌面RMI客户端。重新启动服务器时,客户端出现错误。是否可以在不重新启动客户端的情况下重新启动RMI连接? [编辑]这是堆栈跟踪: 问题答案: 服务器终止后,您将收到一个ConnectException。之后,您可以使用Naming.lookup获取新的服务器对象。

  • 我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput

  • 当执行客户端重新启动或关闭时,服务器端的所有套接字连接都挂起CLOSE_WAIT。用于将序列化数据发送到XDR流中的XdrAble。池是标准KeyedSocketPool的对象。MAXIMUM_RETRY、MAXIMUM_RETYR_BEFORE_RESET_POOL是为重置池连接而定义的常量。关闭连接时我缺少了什么? 公共RESP调用(REQ request、RESP response、int

  • 我正在使用单节点独立zookeeper运行一个带有zookeeper发现SPI机制的单节点Apache Ignite服务器。 我正在尝试使用下面的发现SPI配置从客户端应用程序连接Ignite服务器,如下所示 请提供在zookeeper重新启动后客户端自动重新连接的配置。

  • 问题内容: 调用一次后如何重新连接到套接字io ? 这是代码 如果我这样做,它会起作用。如果我这样做,它将断开连接。但是,如果我尝试使用重新连接,则连接不再起作用。我如何才能建立连接? 问题答案: 好吧,您可以在这里选择… 首次初始化套接字值时,应使用, 下次(调用一次断开连接后),您应使用再次连接。 所以你的应该是这样的