Dav*_*dom 25
您在这里谈论两种完全不同的方法 - TCP是传输层协议,HTTP是应用层协议.HTTP(通常)通过TCP运行,因此无论您选择哪个选项,它仍将通过TCP运行.
效率问题是一个有争议的问题,因为你在谈论不同的OSI层.如果您使用原始TCP套接字,您的解决方案可能会更有效 - 至少在带宽中 - 因为HTTP包含一大堆额外数据(标题),这可能与您的目的无关(取决于聊天的规模)程序).你在谈论开发的是你自己的应用层协议.
您可以通过TCP发送任何您喜欢的内容 - 所有HTTP都可以发送附件,并通过TCP进行操作.FTP也可以通过TCP运行,它纯粹是为了传输"附件"而设计的.为此,您需要编写协议,以便能够告诉远程方以下数据是文件,然后发送文件数据,然后告诉远程方传输完成.这种实现方式多种多样(HTTP方法与FTP方法完全不同),您的选择几乎是无限的.
我不确定node.js连接限制,但我可以相当自信地说它受操作系统的限制.这可能有助于您掌握该问题的答案.
使用TCP还是HTTP进行更多的工作是值得商榷的 - 在两者中都要做很多工作.我可能更倾向于将TCP选项作为您最好的选择.虽然TCP要求您设计协议而不是/和应用程序,但HTTP并不特别适合实时的双向应用程序,如聊天服务器.有许多使用AJAX的HTTP聊天实现,但我可以从痛苦的经历告诉你,它们是后端的完全痛苦.
我想说,如果您打算将端点(即客户端)作为浏览器,那么您应该只关注HTTP.如果您要为端点编写桌面应用程序,那么直接TCP链接肯定是可行的方法.其主要原因是HTTP以请求 - 响应的方式工作,客户端向服务器发送请求,服务器响应.通过TCP,您可以打开单个TCP流,可用于双向通信.这意味着服务器可以立即将事件推送到客户端,而通过HTTP,您必须等待客户端发送请求,因此您可以响应事件.如果您打算使用浏览器作为客户端,它将使整个文件传输更加棘手(至少发送).
有很多方法可以通过使用长轮询和服务器推送来实现这一点(阅读本文)但实现起来真的很麻烦.
如果你要在局域网上(甚至可能在互联网上)实现这一点,那么值得考虑UDP over TCP - 在聊天应用程序中,消息以正确的顺序到达通常并不是绝对关键的任务,即使它是,用户可能无法比网络延迟的变化(可能<100毫秒)更快地输入.然后,对于文件传输,您可以协商单独的TCP套接字进行数据交换(如FTP),或者实现某种UDP ACK系统(如TFTP).
我觉得在这个问题上还有很多话要说,但现在我不能说出来 - 我可以在某个时候扩展这个答案.
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |