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

Raj*_*len 2 mysql long-polling node.js socket.io

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

我面临的问题与性能问题有关.

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

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

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

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

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

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

提前致谢.

小智 8

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

io.set('transports', ['jsonp-polling']);
Run Code Online (Sandbox Code Playgroud)

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

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
};
Run Code Online (Sandbox Code Playgroud)

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