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

3
目前,我已经在node.js中创建了一个应用程序,使用socket.io和mysql向所有客户端发送通知。因此,mysql数据库中的任何更改都将通过socket.io立即通知多个客户端。该应用程序工作得非常好。
我遇到的问题与性能问题有关。
我的浏览器从服务器接收不断的推送通知,这会使我的浏览器性能下降。我/客户端只需要在数据库更改时收到通知,其余时间服务器应处于暂停状态,不发送任何消息给客户端。
换句话说,我需要实现长轮询技术。
如何使用socket.io实现长轮询?
我已经搜索了示例,但是我没有找到可以帮助我在node.js中使用socket.io和mysql实现长轮询的示例。
是否可以使用socket.io实现长轮询?
如果可以,请有人将我重定向到一些有用的链接和示例?
先行谢过!
2个回答

8
您可以强制使用长轮询来使用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"


0

你可以建立一个池来合并每秒钟的常量推送通知,以减少推送计数。


1
嗨,尼尔森,谢谢你的回复。有没有实现的示例?因为我对Node.js、Socket.IO和长轮询这个世界还很陌生。任何示例都会帮助我。 - Raju.allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接