gpt4 book ai didi

http - 讨论: Chat server via node. js : HTTP or TCP?

转载 作者:IT老高 更新时间:2023-10-28 23:14:00 24 4
gpt4 key购买 nike

我正在考虑使用 node.js/socket.io 做一个聊天服务器。我应该将其设为 tcp 服务器还是 http 服务器?我想 tcp 服务器会更有效率,但你能向它发送其他东西,比如文件附件等吗?如果 tcp 更有效,那么效率更高呢?另外,只是想知道一台 node.js 服务器可以处理多少个并发连接?做 TCP 或 HTTP 的工作量更大吗?

最佳答案

您在这里谈论的是两种完全不同的方法 - TCP 是传输层协议(protocol),HTTP 是应用层协议(protocol)。 HTTP(通常)通过 TCP 运行,因此无论您选择哪个选项,它仍将通过 TCP 运行。

效率问题有点争议,因为您在谈论不同的 OSI layers .如果您选择原始 TCP 套接字,您的解决方案可能会更有效 - 至少在带宽方面 - 因为 HTTP 包含一大堆可能与您的目的无关的额外数据( header )(取决于聊天的规模程序)。你所说的开发是你自己的应用层协议(protocol)。

你可以通过 TCP 发送任何你喜欢的东西——毕竟 HTTP 可以发送附件,并且通过 TCP 运行。 FTP 也通过 TCP 运行,它纯粹是为传输“附件”而设计的。为此,您需要编写协议(protocol),以便它能够告诉远程方以下数据是一个文件,然后发送文件数据,然后告诉远程方传输完成。其实现方式多种多样(HTTP 方法与 FTP 方法完全不同),您的选择几乎是无限的。

我不确定 node.js 连接限制,但我可以相当有把握地说它受到操作系统的限制。 This可能会帮助您掌握该问题的答案。

使用 TCP 还是 HTTP 是否需要更多的工作是有争议的 - 两者都需要做很多工作。我可能会更倾向于 TCP 选项是你最好的选择。虽然 TCP 需要您设计一个协议(protocol)而不是/以及一个应用程序,但 HTTP 并不特别适合实时的 2 路应用程序,如聊天服务器。有许多使用 AJAX 的 HTTP 聊天实现,但我可以从痛苦的经验告诉你,它们在后端是一个完全的痛苦。

我想说,如果您打算将端点(即客户端)用作浏览器,那么您应该只查看 HTTP。如果您要为端点编写桌面应用程序,直接 TCP 链接肯定是要走的路。主要原因是HTTP以请求-响应方式工作,客户端向服务器发送请求,服务器响应。通过 TCP,您可以打开单个 TCP 流,该流可用于双向通信。这意味着服务器可以立即将事件推送到客户端,而通过 HTTP,您必须等待客户端发送请求,以便您可以使用事件进行响应。如果您打算使用浏览器作为客户端,它将使整个文件传输变得更加棘手(至少发送)。

有一些方法可以通过 HTTP 使用长轮询和服务器推送 (read this) 来实现这一点,但实现起来可能会很痛苦。

如果您要在 LAN(甚至可能通过 Internet)上实现此功能,则值得考虑使用 TCP 上的 UDP - 在聊天应用程序中,消息以正确的顺序到达通常不是绝对关键的任务,甚至如果是这样,用户可能无法比网络延迟的变化(可能小于 100 毫秒)更快地键入。然后对于文件传输,您可以协商一个单独的 TCP 套接字进行数据交换(如 FTP),或实现某种 UDP ACK 系统(如 TFTP)。

我觉得关于这个主题还有很多话要说,但现在我无法用语言表达 - 我可能会在某个时候扩展这个答案。

关于http - 讨论: Chat server via node. js : HTTP or TCP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341105/

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