2

I'm fairly new to the world of JS and its abundance of libraries. I'm looking to get into a project that involves network communication (sockets) between clients and a server. In a world with tons of libraries, I cannot make a decision as to which to use. I'm looking for something that will bring efficiency and stability.

I've been told that Node.js is like the middleman between you, as the developer, and Socket.IO. I've been told it's a huge framework that you may not use at least half of. I've been told that to maximize efficiency, you're better off using Socket.IO to make your own functionalities. I've done some research on my own and found that Socket.IO NEEDS Node.js and Node.js DOESN'T NEED Socket.IO. Which is completely opposite of what I was told. Then I find that most developers use both Socket.IO and Node.js at the same time?

Like I said, I'm fairly new, but I cannot find the right resources that would help me accomplish a websocket communication between a client and a server with maximum efficiency, or at least explain the difference between Socket.IO and Node.js. If anyone here could, please let me know! I would greatly appreciate it.

4

3 回答 3

2

node.js是一个通用的基于 javascript 的运行时环境(有点类似于其他语言运行时,如范围内的 python)。您可以在其中创建甚至不使用网络的应用程序。它通常用作创建的 Web 应用程序的 Web 服务器,并具有一组出色的工具和丰富的附加组件库。它不需要socket.io。

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

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

node.js当您需要 node 擅长的任何其他事情时才使用,但不需要 websocket 连接。


websockets 本身可以在没有socket.io 和node.js 的情况下在服务器端进行编程。它们可以用严格的 C++ 或 Java 编程。但是socket.io(在节点中运行)提供了一种非常简单的设置它们的方法,因为该socket.io库在一个库和一个 API 中涵盖了客户端和服务器,并且它们都使用相同的语言(javascript)。看看 socket.io 网站上的聊天室应用程序示例,您将不太可能找到任何其他解决方案,可以用尽可能少的代码行来实现这一点,并且在客户端和服务器上使用相同的界面。

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

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


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

例如,我有一个网页,只要网页打开,它就会从我的服务器接收实时数据。网页通过典型的 node.js Web 服务器安装提供服务,但实时数据通过 websocket 连接从服务器发送到客户端。

此外,如果客户端和服务器之间发生闲聊,websockets 可以比一系列 ajax 调用更有效,因为使用 websocket,连接打开一次并重复使用,而使用 ajax,每个连续的 ajax 调用就像一个新的连接。

于 2014-09-26T17:24:51.093 回答
1

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 是 Node.js 使用 WebSockets 的库。

于 2014-09-26T17:53:01.740 回答
0

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

于 2014-09-26T17:40:43.797 回答