是否有可能在不使用socket.io的情况下在节点中创build聊天应用程序

我想在nodejs中创build一个小聊天应用程序。

但是,我发现实现这个function的每一个节点都与socket.io一起使用

因为节点也是在想到推送通知的情况下创build的

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

谢谢!

我想在nodejs中创build一个小聊天应用程序。 但是,我发现实现这个function的每一个节点都与socket.io一起使用。 由于节点也是在推送通知的基础上创build的,因此思考如果可能,纯粹在节点中如何创build聊天应用程序?

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

  1. 使用直接的webSocket来“推”到客户端。 您将需要查找或编写自己的服务器端代码来处理webSocket协议,因为默认情况下,此类代码不会构build到节点中。 ws模块就是这样一个库。 如果使用普通的webSocket,则可能必须自行实现socket.io实现的一些function,如自动重新连接。

  2. find一些其他的库(除了socket.io),它是build立在一个webSocket之上的,它可以让你把数据推送到客户端。

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

所有这些select都涉及到在socket.io中编写一些已经写好的代码,所以大多数开发人员宁愿使用已经工作且已经过testing的解决scheme,而不是自己重新实现。


为了在你的问题中得到进一步的细节,你需要定义“纯粹在节点中”是什么意思才能真正回答这个问题。 这不是一个明确的术语。 socket.io库只是一个用Javascript编写的库,就像成千上万的其他库一样,您可以在node.js中使用它来完成工作。

正如你用节点编程很快看到的,在一个默认的节点实例中,你不能加载其他的库文件。 其中一些库带有节点的默认安装(例如fs库或http库),另外一些是使用前安装的库(通常与input"npm install socket.io"一样简单),然后var io = require("socket.io");

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

如果你不打算使用webSocket,那么没有其他的跨浏览器方法来将数据“推送”到浏览器客户端。 我唯一知道的其他select是浏览器轮询,而不是实际的推送,而是试图通过定期向服务器询问服务器是否对特定客户端有新的东西来模拟推送。 直接轮询的增强是在我们用webSocket实际推动之前发明的“长轮询”。

所有这些问题已经在socket.io中解决了,所以除非你真的只想让你自己的研究项目在自己的代码中重build类似的function,那么你也可以使用类似套接字的方法来构build解决scheme。 io图书馆。

如果你对socket.io库有一些特殊的反对意见,那么请解释一下这个异议,以便我们能够理解你的真实目标是什么。

Node.js没有提供一个开箱即用的服务器端Websocket实现,所以你至less必须引入一个包。

如果你不想和socket.io一起使用,那么你可以按照socket.io使用ws