网站即时通讯功能,WEB即时通讯4大技术( 三 )


从服务端向客户端传输数据的性能如何?如果是文本数据而非二进制数据(如前文所提到的),SSE和WebSocket没什么区别 。它们都用TCP/IP套接字,都是轻量级协议 。延迟、带宽、服务器负载等都没有区别,除非……呃?除非什么?
当你在享用SSE的既存基础设施优势,并在客户端和服务端脚本之间设了一个网络服务器,区别就显现出来了 。一个SSE连接不仅使用一个套接字,还会占用一个Apache线程或进程,如果用PHP,它会为这个连接专门创建一个PHP新实例 。Apache和PHP会使用大量的内存,这会限制服务器所能支持的并行连接数 。所以,要做到用SSE在数据传输性能上和WebSocket完全一样,需要写一个自己的后端服务器,当然,那些在任何情况下都会用自己的服务器并使用Node.js的人,会觉得这有什么稀奇的 。
说一下WebSocket在旧版本浏览器上的兼容 。当前,大约超过2/3的浏览器支持这些新技术,移动端浏览器的支持率会低一些 。依惯例,每当需要双向套接字时,就会用到Flash,并且WebSocket的向后兼容通常是用Flash来做,这已经相当复杂了,如果浏览器上没有Flash,情况更糟 。概括来说,WebSocket难兼容,SSE易兼容 。
有关SSE的详细介绍文章请参见:《SSE技术详解:一种全新的HTML5服务器推送事件技术》 。

推荐阅读