來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
首先,在你的例子里使用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的方案。