如何使用 socket.io 实现长轮询?
Posted
技术标签:
【中文标题】如何使用 socket.io 实现长轮询?【英文标题】:How to implement long polling with socket.io? 【发布时间】:2014-01-08 23:57:22 【问题描述】:目前,我在 node.js 中创建了一个应用程序,以使用带有 mysql 的 socket.io 向所有客户端发送通知。因此,我的 mysql 数据库中的任何更改都将通过 socket.io 立即通知多个客户端。应用程序的工作魅力。
我面临的问题与性能问题有关。
我的浏览器不断收到来自服务器的推送通知,这降低了我的浏览器的性能。 I/Client 只需要在数据库更改时获取通知,其余时间服务器应处于暂停状态,而不向客户端发送任何消息。
换句话说,我需要实现长轮询技术。
我已经用谷歌搜索了一个示例,但我没有找到可以帮助我在 node.js 中使用 socket.io 和 mysql 实现长轮询
是否可以用socket.io实现长轮询?
如果是这样,有人可以将我重定向到一些有用的示例链接吗?
提前致谢。
【问题讨论】:
【参考方案1】:您可以强制 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”
【讨论】:
【参考方案2】:您可以构建一个池来将持续推送的通知合并到每秒一个通知中,以减少推送次数。
【讨论】:
您好,尼尔森感谢您的回复。有没有应该如何实施的例子???因为我是这个 nodejs、socket.io 和长轮询世界的新手。任何例子都会帮助我。以上是关于如何使用 socket.io 实现长轮询?的主要内容,如果未能解决你的问题,请参考以下文章
websocket——通信梳理(短轮询、长轮询、socket、websocket、socket.io)