发送一个socket.io .once消息

sta*_*nna 2 node.js socket.io

如果没有.once调用,这将起作用。

我正在尝试从服务器端代码发送一条消息

io.on('connect', function (socket) { socket.once('connect', function() { socket.emit('mydata', { feed: result});

但是除非删除第二行,否则我什么都不会在客户端得到。我也尝试过socket.once('mydata',{feed:result})但:

throw new TypeError('listener must be a function');
Run Code Online (Sandbox Code Playgroud)

换句话说,只有当存在新的“ mydata”时,如何才能将消息发送到客户端?

谢谢

jfr*_*d00 5

首先,.once()仅适用于事件侦听器-当您只想在下次事件发生时通知您,而不是在事件的后续发生时通知您。它与发送消息无关。

您的特定代码试图执行的操作实际上没有任何意义。您正在参加connect活动,并且正在尝试收听其他connect活动?如果您更完整地描述您要完成的工作,这将有所帮助?“仅当有新的mydata时才意味着什么”?如何判断是否有新的mydata?

如果您只是尝试发送mydata消息,则在客户端首次连接时,您可以执行以下操作:

io.on('connect', function(socket) {
    socket.emit('mydata', { feed: result });
}
Run Code Online (Sandbox Code Playgroud)

如果您试图确保即使在同一套接字上重新连接,也只向连接发送一次此消息,则可以执行以下操作:

io.on('connect', function(socket) {
    if (!socket.sentMydata) {
        socket.emit('mydata', { feed: result });
        socket.sentMydata = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您想确保此客户端仅发送一次此消息,即使重新加载页面或客户端导航后退,那么您将必须使用持久性标记,例如cookie或某些会话ID或类似的东西。