Web应用程序中的实时更新是一个难题,因为处理许多同时长期TCP连接的单个服务器是
hard problem.
原文链接:https://www.f2er.com/php/130288.html这在Apache PHP这样的传统Web服务器上基本上是不可能的,因为它为每个传入连接分配了整个OS thread.线程有很大的开销(比如stack space的大约2 MB RAM,加上你的应用程序需要的堆内存),因此只有几百个同时打开你的页面的客户端可以让小服务器瘫痪,甚至超大(并且超级)的百GB RAM服务器也只能处理几千个并发连接.
实时通信是Node真正闪耀的地方.它的单线程,事件驱动架构可以轻松支持商用笔记本电脑上的2,000并发连接,因为每个传入连接都是一个很小的(几千字节)堆分配.限制因素实际上变成了cpu和底层操作系统的TCP堆栈.
我的建议是看一下Node – 这正是它的设计问题.您已经了解了JavaScript,因此它只是API的一个问题,并且掌握了Node的异步,事件驱动特性.
您可能希望将Express用于HTTP服务器需求,并使用Socket.io进行实时通信.
Socket.io特别棒,因为它的客户端库抽象了所有跨浏览器支持的苦差事:
>在A-grade browsers,它通过WebSockets连接到您的服务器.这将使您获得一个无限期保持连接的TCP套接字,您可以随时推送任意数据.
>在下层浏览器中,它使用回退机制:
>基于Flash的传输,如WebSockets,但需要Flash播放器(如果可用)
> AJAX long polling
>如果这些都不起作用,还有一些esoteric后备