gpt4 book ai didi

node.js - 是否可以在不使用socket.io的情况下在 Node 中制作聊天应用程序

转载 作者:行者123 更新时间:2023-12-02 16:26:56 29 4
gpt4 key购买 nike

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

但是我发现要实现此功能,node socket.io 一起使用。

由于 Node 也是在创建推送通知时考虑到的,所以这么想

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

谢谢!

最佳答案

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“推送”到客户端。您将需要查找或编写自己的服务器端代码来处理 webSocket 协议(protocol),因为默认情况下此类代码并未内置于 Node 中。 ws module就是这样一个图书馆。如果使用普通的 webSocket,您可能必须自己实现 socket.io 实现的一些功能,例如自动重新连接。

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

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

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

<小时/>

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

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

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

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

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

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

关于node.js - 是否可以在不使用socket.io的情况下在 Node 中制作聊天应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29848337/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com