发送socket.io .once消息

时间:2016-03-25 15:49:27

标签: 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');

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

由于

2 个答案:

答案 0 :(得分:3)

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

您的具体代码尝试做的事情并没有多大意义。您正处于connect事件中并且您正在尝试收听另一个connect事件?如果你更完整地描述了你想要完成的事情,那会有所帮助吗?什么"只有当有新的mydata意味着"?如何判断是否有新的mydata?

如果您只是尝试发送mydata消息,那么当客户端首次连接时,您可以这样做:

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

如果您尝试确保仅将此消息发送到连接,即使在同一套接字上重新连接,也可以执行以下操作:

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

如果您想确保此客户端只发送一次此消息,即使重新加载页面或客户端导航并返回,那么您将不得不使用持久性标记,如cookie或某个会话ID或类似的东西。

答案 1 :(得分:0)

我不确定我是否完全理解你的问题,但你可以使用映射。

   <table width="100%" cellpadding="0" cellspacing="0" border="0">
    <tr>
    <td width="27%" align="left" valign="top">
    <span class="param">Text0</span> 23<br />
    <span class="param">Text1</span> 173<br />
    <span class="param">Text2</span> 54<br />
    <span class="param">Text3</span> 2<br /><br />
    </td>
    <td width="27%" align="left" valign="top">
    <span class="param">Text4</span><br />
    one <br />
    two <br />
    three <br />
    </td>
    <td width="46%" align="left" valign="top">
    <span class="param">Text5</span><br /> 
    one -<br />
    two -<br />
    three -<br />
    </td>
    </tr>
    </table>