NodeJS如何处理持久连接而不使用WebSockets?

7
我对NodeJS非常陌生(如果有些事情听起来很天真,我很抱歉),现在我正在研究示例聊天应用程序的源代码。但是,我不明白一件事。我知道WebSockets帮助处理持久的全双工双向连接。但是,在前面提到的聊天应用程序中,NodeJS如何管理一个持久连接而不使用WebSockets?如果NodeJS可以处理持久的双向连接,那么集成Socket.IO在Node中的作用是什么?
2个回答

8
除了WebSockets,您可以使用长轮询技术来创建服务器和客户端之间的持久连接。
长轮询是传统轮询技术的变体,允许模拟从服务器到客户端的信息推送。使用长轮询,客户端以类似于正常轮询的方式请求服务器上的信息。但是,如果服务器没有可用于客户端的任何信息,服务器将保留该请求并等待某些信息可用。一旦信息可用(或适当的超时后),将向客户端发送完整响应。
但是,它不像WebSockets那样高效,但由于它可以在所有浏览器中工作,因此被广泛使用。请查看这篇文章
“将千字节的数据减少到2个字节……并且将延迟从150毫秒降低到50毫秒,这远不是微不足道的。事实上,仅这两个因素就足以使WebSocket对谷歌非常有吸引力。”

2
我不熟悉聊天应用程序。我没有看到托管演示的链接。
NodeJS是一种服务器端技术,它对本地套接字没有问题。Socket.IO是一种客户端和服务器端技术的组合。它恰好使用NodeJS作为服务器端。它的美妙之处在于,它在客户端上提供了一个通用的通信API,无论浏览器实际具有什么功能。

聊天应用程序托管在chat.nodejs.org。所以你的意思是可以仅利用NodeJS模拟Socket.Io提供的所有功能? - 0xff0000
哦,我不知道它使用了长轮询!谢谢你的指点! - 0xff0000
1
它使用长轮询作为其回退技术之一。它尝试使用WebSockets,如果不支持,则尝试FlashSockets,如果不支持,则回退到各种老派的Comet方法。 - mikermcneil
@mikermcneil,我不这么认为。它使用长轮询。请查看源代码:https://github.com/ry/node_chat/blob/master/client.js - Fantius
socket.io可以完成你所描述的任务,但是那个聊天应用程序并没有使用socket.io。 - Fantius
显示剩余3条评论

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