是否可以在不使用socket.io的情况下在节点中制作聊天应用程序

vij*_*jay 4 chat websocket node.js socket.io

我想在nodejs中制作小型聊天应用程序。

但我发现要实现此功能的每个地方都将节点与socket.io一起使用

由于节点在创建时也考虑到了推送通知,所以认为

如果可能的话,如何纯粹在节点中创建聊天应用程序?

谢谢!

jfr*_*d00 6

我想在nodejs中制作小型聊天应用程序。但我发现,为了实现此功能,节点都是与 socket.io 一起使用的。由于节点在创建时也考虑到了推送通知,因此思考如何在可能的情况下纯粹在节点中创建聊天应用程序?

是的,可以在不使用 socket.io 的情况下创建支持聊天的 Node.js 应用程序。您有以下选择:

  1. 使用直接的 webSocket“推送”到客户端。您将需要查找或编写自己的服务器端代码来处理 webSocket 协议,因为默认情况下此类代码并未内置于 Node 中。ws 模块就是这样的库之一。如果使用普通的 webSocket,您可能必须自己实现 socket.io 实现的一些功能,例如自动重新连接。

  2. 找到一些其他构建在 webSocket 之上的库(除了 socket.io),它可以让您将数据推送到客户端。

  3. 发明你自己的 webSocket 替代品(可能是客户端轮询或长轮询)并编写代码。这是 webSocket 出现之前所做的事情。它比持续连接的 webSocket 效率低得多。

所有这些选择都涉及编写一些已经在 socket.io 中为您编写的代码,因此大多数开发人员宁愿只使用已经工作且已经测试过的解决方案,而不是自己重新实现它。


要更详细地了解您的问题,您需要定义“纯粹在节点中”的含义才能真正回答这个问题。这不是一个定义明确的术语。socket.io 库只是一个用 Javascript 编写的库,就像您可以在 Node.js 中使用的数千个其他库一样来完成您的工作。

正如您在节点编程中很快看到的那样,在默认节点实例中,如果不加载其他库,您根本无法做很多事情。其中一些库附带了节点的默认安装(例如,fs库或http库),而其他库是您在使用之前安装的库(通常只需键入"npm install socket.io"),然后键入var io = require("socket.io");

如果您不打算使用 socket.io 库,那么您需要一种将数据“推送”到客户端的机制,以使聊天应用程序正常工作。唯一真正具有跨浏览器支持的“推送”是 webSocket。socket.io 使用的是 webSocket。您可以在不使用 socket.io 的情况下使用 Node 中的 webSocket,但是您必须编写或查找实现可以在 Node 上运行的 webSocket 协议的代码(ws 模块就是这样的库之一)。默认情况下,此类代码不会内置到节点中。

如果您不打算使用 webSocket,则没有其他跨浏览器方法可以将数据“推送”到浏览器客户端。我知道您唯一的其他选择是浏览器轮询,这不是实际的推送,而是尝试通过定期询问服务器是否有针对特定客户端的新内容来模拟推送。直接轮询的增强是“长轮询”,它是在我们使用 webSockets 进行实际推送之前发明的。

所有这些问题都已在 socket.io 中得到解决,因此除非您真的只是希望自己的研究项目在自己的代码中重建类似的功能,否则您也可以使用已经通过使用套接字之类的东西完成的解决方案进行构建。 io 库。

如果您对 socket.io 库有一些具体的反对意见,请解释该反对意见,以便我们了解您的真正目标是什么。