如何使用socket.io实现长轮询?

时间:2013-12-20 07:13:30

标签: mysql node.js socket.io long-polling

目前,我已经在node.js中创建了一个应用程序,使用带有mysql的socket.io向所有客户端发送通知。因此,我的mysql数据库中的任何更改都将立即通过socket.io通知多个客户端。应用程序的工作魅力。

我遇到的问题与性能问题有关。

我的浏览器从服务器获得持续推送通知,这会降低浏览器的性能。 I / Client需要仅在数据库更改时获取通知,其余时间服务器应处于暂停状态,而不向cilent发送任何消息。

换句话说,我需要实现长轮询技术。

如何使用socket.io实现长轮询?

我已经用Google搜索了一个示例,但我发现没有任何可以帮助我在node.js中使用socket.io和mysql实现长轮询

是否可以使用socket.io实现长轮询?

如果是这样,有人可以通过示例将我重定向到一些有用的链接吗?

提前致谢。

2 个答案:

答案 0 :(得分:7)

您可以强制socket.io仅使用长轮询:

io.set('transports', ['jsonp-polling']);

但我不认为长轮询是你正在寻找的解决方案。您应该独立于所使用的基础技术。我可能会这样做:

function writeToMysqlDb(data) {
    mySqlDriver.write(data); //whatever you use to write data to MySql
    socket.emit('dbChanged', data); //send the same data to all connected clients
};

我会将传输保留为默认选项:“传输默认值为websocket,htmlfile,xhr-polling,jsonp-polling”

答案 1 :(得分:0)

您可以构建一个池,以便每秒在一个通知中合并常量推送通知,以减少推送次数。