Socket.IO对Node.js有什么作用

我对JS的世界和丰富的图书馆相当陌生。 我正在寻找一个涉及客户端和服务器之间的网络通信(套接字)的项目。 在拥有大量图书馆的世界里,我无法决定使用哪个图书馆。 我正在寻找能带来效率和稳定性的东西。

我被告知Node.js就像开发人员和Socket.IO之间的中间人。 我被告知这是一个巨大的框架,至少有一半可能不会使用。 我被告知要最大限度地提高效率,最好使用Socket.IO来创建自己的功能。 我自己做了一些研究,发现Socket.IO需要Node.js和Node.js不需要Socket.IO。 这与我所说的完全相反。 那么我发现大多数开发人员同时使用Socket.IO和Node.js?

就像我说的,我很新,但我找不到合适的资源来帮助我以最高的效率完成客户端和服务器之间的websocket通信,或者至少解释Socket.IO和Node.js之间的区别。 如果有人在这里,请让我知道! 我将不胜感激。


node.js是一个通用的基于JavaScript的运行时环境(与其他语言运行时(如Python中的Python)有所相似)。 您可以在其中创建甚至不使用网络的应用程序。 它经常被用作创建网络应用程序的网络服务器,并拥有一套完善的工具和丰富的插件库。 它不需要socket.io。

socket.io是一个特定的库,用于在客户端和服务器之间启用类似于网络套接字的通信(例如,聊天室应用程序是典型示例)。 socket.io的服务器端采用JavaScript运行时(因为它是用JavaScript编写的),所以通常意味着node.js(尽管我不确定是否可以替换不同的JS运行时)。

您可以将node.js想象为平台和socket.io就像特定的工具一样,可以在该平台上执行特定的工作。 如果您需要客户端和服务器之间的Web套接字连接,则可以使用socket.io (在node.js顶部)。

如果您需要节点擅长的其他任何其他功能,则只需使用node.js ,但不需要websocket连接。


websockets本身可以在服务器端进行编程,而不需要socket.io和node.js. 他们可以用C ++或Java编程。 但是, socket.io (运行在节点中)提供了一种非常简单的方法来设置它们,因为socket.io库涵盖了一个库中的客户端和服务器以及一个API,并且它们都是相同的语言(javascript)。 看看socket.io站点上的聊天室应用程序示例,您将不可能找到任何其他解决方案,只需要尽可能少的代码行,并且在客户端和服务器上使用相同的接口即可完成此任务。

如果你只是建立一个websocket服务器(没有任何web服务器或web应用程序),你仍然可以使用node和socket.io,并将它用于websocket服务器,它仍然非常有效。 虽然节点能够做很多其他的事情,但如果你不配置和安装所有其他的东西,它们不会花费任何东西 - 它们只是没有运行的未使用的功能。

我应该补充一点,socket.io库所做的另一件事是处理客户端和服务器之间的自动协商,以找到客户端和服务器进行通信的最佳通道。 如果websocket可用,那么socket.io可能会使用它们,但是如果web套接字不可用,则socket.io将使用替代方法(即使在较旧的浏览器中)。 这个功能在socket.io中免费,甚至不需要做任何事情。


如果您不完全清楚,websockets通常用于提供客户端和服务器之间的实时通信。 尽管客户端可以随时通过ajax调用或网页请求从服务器请求数据,但是websockets允许的是客户端和服务器之间的双向实时通信,而websockets的最大优点是服务器可以发送客户端在实时数据连接时随时获得实时数据。

例如,我有一个网页,可以在网页打开的任何时候从我的服务器接收实时数据。 该网页通过典型的node.js Web服务器安装提供,但实时数据通过websocket连接从服务器发送到客户端。

另外,如果在客户端和服务器之间发生讨论会话,websockets可能比一系列ajax调用更有效率,因为使用websocket,连接会打开一次并重复使用,而对于ajax,每个连续的ajax调用就像新的连接。


Node.js是一个运行时环境。 它是一个带有围绕异步I / O构建的标准库的JavaScript引擎。 它扮演着Java,Python,Ruby,.NET等为其他许多Web应用程序所扮演的角色。

我被告知这是一个巨大的框架,至少有一半可能不会使用。

大多数人从不使用大部分标准库也许是事实,但我不认为它比其他运行时更像Node.js。 “框架”并不是一个准确的词来描述它。

我被告知要最大限度地提高效率,最好使用Socket.IO来创建自己的功能。

无论谁告诉你错误,或者说为了最大限度地提高效率,最好使用[Node.js和] Socket.IO [而不是其他解决方案]。 许多其他非Node.js解决方案每个连接都需要单个线程或进程,这限制了服务器可以处理的同时连接的数量。 Node.js是围绕异步I / O构建的,这对于保持多个连接一次打开效果更好,而Socket.IO是使用WebSockets的Node.js库。


TL; DR:Socket.IO可以在您的客户端和服务器之间实时触发事件,因此您无需重新加载页面即可注意到发生了某些变化。 这可用于“实时”应用程序,如协作绘图,实时聊天,在线游戏等等!

链接地址: http://www.djcxy.com/p/44739.html

上一篇: What role does Socket.IO have with Node.js

下一篇: Persisting websocket connection with socket.io