间隔时间向websockets发送消息

时间:2011-07-22 05:00:03

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

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

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

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

我正在使用node.js / express。

2 个答案:

答案 0 :(得分:7)

像这样......

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价值有害和负载链接无处可用。我甚至不会展示它。

答案 1 :(得分:1)

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