我对JS世界及其丰富的图书馆都很陌生。我想进入一个涉及客户端和服务器之间的网络通信(套接字)的项目。在一个拥有大量图书馆的世界里,我无法决定使用哪些图书馆。我正在寻找能带来效率和稳定性的东西。
我被告知Node.js就像你作为开发者和Socket.IO之间的中间人。我被告知这是一个巨大的框架,你至少可以使用一半。我被告知为了最大限度地提高效率,最好使用Socket.IO来制作自己的功能。我自己做了一些研究,发现Socket.IO需要Node.js和Node.js不需要Socket.IO。这与我所说的完全相反。然后我发现大多数开发人员同时使用Socket.IO和Node.js?
就像我说的,我是相当新的,但我找不到合适的资源来帮助我以最高效率完成客户端和服务器之间的websocket通信,或者至少解释Socket.IO和Node之间的区别.js文件。如果有人在这里,请告诉我!我将不胜感激。
答案 0 :(得分:2)
node.js
是一个基于javascript的通用运行时环境(有点类似于其他语言运行时,如范围内的python)。您可以在其中创建甚至不使用网络的应用程序。它通常用作创建的Web应用程序的Web服务器,并且具有一组很好的工具和丰富的附加程序库。它不需要socket.io。
socket.io
是一个特定的库,用于在客户端和服务器之间启用类似于Web套接字的通信(例如,聊天室应用程序是规范示例)。 socket.io的服务器端假定javascript运行时(因为它是用javascript编写的)所以通常意味着node.js(虽然我不确定是否可以替换不同的JS运行时)。
您可以将node.js
视为平台,将socket.io
视为执行在该平台上运行的特定工作的特定工具。如果您需要客户端和服务器之间的Web套接字连接,您可以使用socket.io
(在node.js
之上)。
如果您需要节点擅长的任何其他功能,但不需要websocket连接,则仅使用node.js
。
websockets本身可以在没有socket.io且没有node.js的情况下在服务器端编程。它们可以用海峡C ++或Java编程。但是socket.io
(在节点中运行)提供了一种非常简单的方法来设置它们,因为socket.io
库涵盖了一个库和一个API中的客户端和服务器,并且它们都使用相同的语言(javascript)。查看socket.io站点上的聊天室应用程序示例,您将不太可能找到任何其他解决方案,只需很少的代码行,并在客户端和服务器上使用相同的接口即可实现。
如果您只是设置一个websocket服务器(没有任何类型的Web服务器或Web应用程序),您仍然可以使用node和socket.io并将其仅用于websocket服务器,它仍然非常有效。虽然节点能够执行许多其他操作,但如果您不配置和安装所有其他内容,它们不会花费任何成本 - 它们只是未使用的未运行的功能。
我应该补充一点,socket.io库做的另一件事是它处理客户端和服务器之间的自动协商,以找到客户端和服务器进行通信的最佳通道。如果websockets可用,那么socket.io可能会使用它们,但是如果web套接字不可用,socket.io有其他方法可以使用(即使在旧版浏览器中)。该功能在socket.io中免费提供,您甚至无需做任何事情。
如果您不完全清楚,则通常使用websockets来提供客户端和服务器之间的实时通信。虽然客户可以随时通过ajax调用或网页请求从服务器请求数据,但是websockets允许的是客户端和服务器之间的双向实时通信,而websockets的最大优点是服务器可以发送客户端实时数据在连接时随时可用。
例如,我有一个网页,可以在网页打开时随时从我的服务器接收实时数据。该网页通过典型的node.js Web服务器安装提供,但实时数据通过websocket连接从服务器发送到客户端。
此外,如果在客户端和服务器之间发生了激烈的对话,则websockets可能比一系列ajax调用更有效,因为使用websocket,连接打开一次并重复使用,而使用ajax,每个连续的ajax调用就像一个新的联系。
答案 1 :(得分:1)
Node.js是一个运行时环境。它是一个javascript引擎,其standard library围绕异步I / O构建。它与Java,Python,Ruby,.NET等在许多其他Web应用程序中扮演的角色相同。
我被告知这是一个巨大的框架,你至少可以使用一半。
大多数人可能从不使用大多数标准库,但我不认为Node.js比其他运行时更真实。 “框架”不是一个准确的词来形容它。
我被告知为了最大限度地提高效率,最好使用Socket.IO来制作自己的功能。
无论谁告诉你这是错误的,或者意味着要最大限度地提高效率,你最好使用[Node.js和] Socket.IO [而不是其他解决方案]。许多其他非Node.js解决方案每个连接需要一个线程或进程,这限制了服务器可以处理的同时连接数。 Node.js是围绕异步I / O构建的,这样可以更好地保持多个连接一次打开,Socket.IO是Node.js用于使用WebSockets的库。
答案 2 :(得分:0)
TL; DR:Socket.IO可以在您的客户端和服务器之间实时触发事件,因此您无需重新加载页面即可发现变化。这可以用于& #34;活"协作绘图,实时聊天,在线游戏等应用程序!