我正在考虑使用node.js/socket.io做一个聊天服务器。我应该让它成为tcp服务器还是http服务器?我想tcp服务器会更有效,但你能发送其他东西,如文件附件等?如果tcp更有效,那么效率提高了多少?另外,只是想知道一个node.js服务器可以处理多少并发连接?TCP和HTTP的工作量更大吗?
你在这里谈论的是两种完全不同的方法——TCP是传输层协议,HTTP是应用层协议。HTTP(通常)在TCP上运行,所以无论你选择哪个选项,它仍然是在TCP上运行。
效率问题是一种没有意义的点,因为你在谈论不同的OSI层。如果您使用原始的TCP套接字,您的解决方案可能会更有效——至少在带宽方面——因为HTTP包含一大堆可能与您的目的无关的额外数据(报头)(取决于聊天程序的规模)。你所说的是开发你自己的应用层协议。
你可以通过TCP发送任何你想要的东西——毕竟HTTP可以发送附件,并且在TCP上运行。FTP也在TCP上运行,而TCP纯粹是为传输"附件"而设计的。为了做到这一点,您需要编写协议,以便它能够告诉远程方下面的数据是一个文件,然后发送文件数据,然后告诉远程方传输完成。实现方法多种多样(HTTP方法与FTP方法完全不同),您的选择几乎是无限的。
我不确定node.js的连接限制,但我可以相当有信心地说,它受到操作系统的限制。这可能会帮助你掌握这个问题的答案。
用TCP还是HTTP做更多的工作是有争议的——用两者都做很多工作。我可能更倾向于TCP选项是您最好的选择。TCP要求您设计一个协议而不是一个应用程序,而HTTP并不特别适合像聊天服务器这样的双向应用程序。有许多使用AJAX的HTTP聊天实现,但我可以从痛苦的经历中告诉您,它们在后台是完全痛苦的。
我想说,你应该只看HTTP,如果你打算端点(即客户端)是一个浏览器。如果你要为终端编写一个桌面应用程序,那么直接的TCP链接绝对是最好的选择。其主要原因是HTTP以请求-响应方式工作,其中客户端向服务器发送请求,服务器响应。在TCP上,您可以打开单个TCP流,它可以用于双向通信。这意味着服务器可以立即将事件推送到客户端,而在HTTP上,您必须等待客户端发送请求,因此您可以使用事件进行响应。如果你打算使用浏览器作为客户端,这将使整个文件传输的事情变得更加棘手(至少发送)。
有一些方法可以在HTTP上使用长轮询和服务器推送来实现这一点,但是实现起来真的很痛苦。
如果你打算在局域网(或甚至可能在互联网上)实现这个,值得考虑UDP而不是TCP——在聊天应用程序中,消息以正确的顺序到达通常不是绝对关键的任务,即使是,用户也可能无法比网络延迟的变化(可能是100毫秒)更快地打字。然后,对于文件传输,您可以为数据交换协商一个单独的TCP套接字(如FTP),或实现某种UDP ACK系统(如TFTP)。
我觉得关于这个问题还有很多话要说,但是现在我无法用语言来表达,我可能会在某个时候扩展这个答案。
聊天服务器是节点中的Hello World程序。使用http .
至于它能处理多少并发连接的问题,这完全取决于你的系统。设置一个简单的聊天服务器,然后尝试对其进行基准测试。另外,请查看http://search.npmjs.org/并搜索chat
以获取一些指针。