讨论:通过node.js聊天服务器:HTTP还是TCP?

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

您在这里谈论两种完全不同的方法 – TCP是传输层协议,HTTP是应用层协议。 HTTP(通常)通过TCP进行操作,因此无论您select哪个选项,它都将通过TCP进行操作。

效率问题是一个有争议的问题,因为你正在谈论不同的OSI层 。 如果你使用了原始的TCP套接字,那么你的解决scheme可能会更有效率 – 至less在带宽上 – 因为HTTP包含了大量额外的数据(头文件),这些数据可能与你的目的无关(取决于聊天的规模程序)。 你正在谈论的就是你自己的应用层协议。

你可以通过TCP发送任何你喜欢的东西 – 毕竟HTTP可以发送附件,并且通过TCP进行操作。 FTP也是通过TCP进行操作的,纯粹是为了传送“附件”而devise的。 为了做到这一点,您需要编写协议,以便能够告诉远程方以下数据是文件,然后发送文件数据,然后告诉远程方传输已完成。 这个实现有很多种不同的方法(HTTP方法与FTP方法完全不同),你的select几乎是无限的。

我不确定node.js连接的限制,但是我可以相当肯定地说它受操作系统的限制。 这可能会帮助你解决这个问题的答案。

用TCP或HTTP做更多的工作是值得商榷的 – 在这两方面都做了很多工作。 我可能更倾向于selectTCP作为你最好的select。 尽pipeTCP需要你devise一个协议而不是一个应用程序,但是HTTP并不特别适用于聊天服务器这样的双向应用程序。 有很多使用AJAX的HTTP聊天实现,但是我可以从痛苦的经验告诉你,它们在后端完全是痛苦的。

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

有很多方法可以通过使用长轮询和服务器推送的HTTP来实现这一点( 阅读本文 ),但实现起来可能是一个很痛苦的事情。

如果你打算在局域网上(或者甚至是在互联网上)实现这个function,那么值得考虑一下UDP over TCP–在聊天应用中,消息以正确的顺序到达并不是绝对的任务关键,即使它是,用户可能无法input比networking延迟(可能<100ms)更快的变化。 那么对于文件传输,你可以协商一个单独的TCP套接字来进行数据交换(比如FTP),或者实现某种types的UDP ACK系统(如TFTP)。

我觉得在这个问题上还有很多话要说,但现在我不能说出来 – 我可以在某些时候延伸这个答案。

聊天服务器是节点中的Hello World程序。 使用http。

至于可以处理多less个并发连接的问题,都取决于你的系统。 设置一个简单的聊天服务器,然后尝试对其进行基准testing。

此外,检查出http://search.npmjs.org/并searchchat的几个指针。