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

时间:2015-04-24 13:07:04

标签: node.js websocket socket.io chat

我想在nodejs.

中制作小型聊天应用

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

由于节点也是在推送通知的基础上创建的,所以想到

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

谢谢!

2 个答案:

答案 0 :(得分:3)

  

我想在nodejs中制作小型聊天应用。但我发现的每一个地方   要实现此功能,节点与socket.io一起使用。作为节点   还创建了推送通知,因此思考如何   如果可能,在节点中创建聊天应用程序?

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

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

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

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

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

    要进一步详细解释您的问题,您需要定义什么"纯粹在节点"意思是真正回答这个问题。这不是一个定义明确的术语。 socket.io库只是一个用Javascript编写的库,就像你可以在node.js中使用的数千个其他库来完成你的工作。

    正如您在节点编程中看到的那样,在没有加载其他库的情况下,您无法在默认节点实例中完成任何操作。其中一些库带有节点的默认安装(例如fs库或http库),其他库是您在使用之前安装的库(通常只需键入{{1} })然后"npm install socket.io"

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

    如果您不打算使用webSocket,那么就没有其他跨浏览器方法来推送"数据到浏览器客户端。你唯一知道的另一个选择是浏览器轮询,这不是实际推送,而是试图通过定期询问服务器服务器是否有特定客户端的新内容来模拟推送。对直接轮询的增强是长期轮询"这是在我们实际使用webSockets之前发明的。

    所有这个问题都已在socket.io中得到解决,所以除非你真的只想让你自己的研究项目在你自己的代码中重建类似的功能,否则你也可以建立一些已经通过使用像socket.io库。

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

答案 1 :(得分:1)

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

如果您不想使用socket.io,那么您可以推荐ws socket.io,这是scp username@host:folder/file.bsp /local/folder 使用的内容。