来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
首先,在你的例子里使用ajax方式访问服务器是可行的,只要你的服务器端返回的response包含正确的Access-Control-Allow-Origin这条header。详情参见HTTP access control (CORS)。
然后,关于实时聊天的需求,可能的解决方案除了long-poll什么的之外,大约有以下两种:
1、利用先进的WebRTC
WebRTC是一种新的Web标准,用于实现Web环境中的实时点对点通信,可以传输数据、语音和视频。有一些第三方javascript库可以方便的支持WebRTC,比如PeerJS - Simple peer-to-peer with WebRTC。但是!可惜的是,目前在“相对先进”的移动端的浏览器世界中,也只有Android Chrome 37支持它。想要利用它的优秀特性,可能只能再等等。
参见:Can I use... Support tables for HTML5, CSS3, etc。
2、自行通过WebSockets实现
WebSockets是一种为实时双向数据传输建立的Web传输协议,它使得服务器端能够主动push数据到浏览器端。WebSockets目前在移动端的支持要略好一点,iOS 7以上和Android 4.4以上都可以支持。如果使用Crosswalk打包,应该可以在更多版本的Android系统上使用。基于WebSockets的第三方库也不少,比如http://binaryjs.com/。
参见:Can I use... Support tables for HTML5, CSS3, etc。
当然,如果想要使用最传统和古老的纯HTTP请求方式,也不是不可以实现。浏览器端以固定的频率向服务器请求数据,可以在一定程度上模拟实时通信。但是这样的缺点也十分明显,资源开销过大,而且很难实现真正的实时(其实也是资源开销……)。其他的,Java applets和Flash在移动端可能不是很可行的选项。
所以说,如果想要实现一个类似QQ群的应用,在移动端浏览器环境中目前可能的最佳选择大约是基于WebSockets的方案。