【问题标题】:sending message to websockets on interval每隔一段时间向 websockets 发送消息
【发布时间】:2011-07-22 05:00:03
【问题描述】:

我正在尝试将“查看最近搜索”功能构建到我拥有的网站中。本质上,我想每 5 秒在网站上显示一个新的最近搜索。

最好的方法是什么?我正在考虑让每个页面都使用 socket.io 连接到我的服务器,然后每 5 秒向所有套接字广播一条关于新搜索的消息。在客户端,在套接字上接收到来自服务器的消息后,我将使用一些客户端 javascript 来更新网页的最近搜索部分。

这是最好的方法吗?如果是这样,我应该如何实施?

我正在使用 node.js/express。

【问题讨论】:

  • 这听起来像是一种复杂的方法,特别是考虑到与 AJAX 甚至脚本注入或刷新自身的 iframe 相比,websockets 的支持有限。
  • @Dan Socket.io 可以/将回退到不支持 WebSocket 的长轮询等。

标签: node.js real-time websocket setinterval socket.io


【解决方案1】:

这样的……

var io = require('socket.io').listen(3001);

// Send to Everyone
setTimeout(function() {
  io.sockets.send('message');
}, 5000 );

// Send to Everyone on channel test123
setTimeout(function() {
  io.sockets.emit('test123', {test: "success!"} );
}, 5000 );

(未经测试,但应该可以工作。需要 Socket.IO 0.7.x 或更高版本。让我知道这是怎么回事=]

但请注意,这不是处理此问题的最佳方式。最好使用事件来通知服务器向客户端发送新数据。例如,当您将新数据添加到数据库时,那时(并且仅在那个时候)将新数据发送到客户端。当您可以围绕它进行设计时,每 5 秒检查一次有点愚蠢且效率低下。 Socket.IO 的重点是推送,而不是轮询。 新技术需要新的思维方式。

此外,显示最近的搜索非常重要:这些链接通常不会向用户显示,因为它们通常过于随机而无用。也许是热门搜索,但该信息不会定期更改,不足以保证如此频繁的刷新。此外,大多数人使用这种技术来让他们的网站列出他们没有真实内容的页面。需要注意的重要一点是,如果您允许搜索引擎访问这些页面(通过不在 robots.txt 中将您的搜索结果页面列入黑名单),您将面临从 Google 获得低质量标记的非常高的风险。

我最真诚的建议:虽然这可能是一个很酷的功能,尤其是对于管理控制台而言,但它对访问者完全没用,并且通过添加到 Google 的索引低质量内容可能会损害您网站的 SEO 价值和大量的链接毫无用处。我什至不会显示它。

【讨论】:

    【解决方案2】:

    如果您选择 5 秒这样的设定时间,那么我认为您不需要设置套接字 io。只需执行 setInterval 并每 5 秒向服务器询问一次新的最近搜索。这也意味着最近搜索的调用不会同步,确保服务器不必立即向每个人发送更新(就像 socket.io 和广播新的最近搜索消息一样)

    【讨论】:

    • 酷,我也想过这个,这更有意义。谢谢!
    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2017-10-17
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多