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

is it possible to make chat app in node without using socket.io

我想在nodejs.

中制作小型聊天应用

但是我发现要实现此功能的每个地方 node 都与 socket.io

一起使用

因为 node 也是在考虑 推送通知 的情况下创建的,所以想

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

谢谢!

Node.js 没有随附开箱即用的服务器端 Websocket 实现,因此您至少必须引入一个包。

如果您不想使用 socket.io,您可以推迟到 ws,这是 socket.io 在幕后使用的。

I want to make small chat app in nodejs. But every where i found that to achieve this functionality node is used with socket.io. As node was also created with push notification in mind so thinking How to create chat app purely in node if possible ?

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

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

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

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

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


要深入了解您的问题,您需要定义 "purely in node" 的含义才能真正回答这个问题。这不是一个定义明确的术语。 socket.io 库只是一个用 Javascript 编写的库,就像您可以在 node.js 中使用的数千个其他库一样来完成您的工作。

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

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

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

所有这些问题都已在 socket.io 中得到解决,因此除非您真的只想让自己的研究项目在您自己的代码中重建类似的功能,否则您不妨在已经完成的解决方案的基础上进行构建通过使用类似 socket.io 库的东西。

如果您对 socket.io 库有一些具体的异议,请解释该异议,以便我们了解您的真正目标。