2009-11-08 85 views
3

有沒有辦法讓JavaScript連接保持HTTP連接?如何保持HTTP連接活着?

+0

你究竟是什麼意思?你想模擬服務器推送? – Myles 2009-11-08 22:39:32

+0

最好告訴我們你到底想要解決什麼問題。 – spender 2009-11-08 22:43:54

+0

保持連接處於活動狀態以獲得更快的響應。我聽說這種技術被用在瀏覽器遊戲中,幾乎有實時行爲。 – powtac 2009-11-08 22:44:12

回答

7

簡而言之,我認爲JavaScript中長壽命http連接的概念實際上是圍繞COMET的一種通信方式。這可以通過幾種不同的方式來實現,但本質上涉及客戶端(使用XmlHttp權力)立即從服務器請求數據,並且服務器拒絕響應,直到某個事件觸發爲止。一旦收到這個響應,客戶立即發出另一個請求(這將再次掛起在服務器端,直到需要發送)。這模擬服務器推送,但實際上只不過是以聰明的方式使用的延遲響應。在最壞的情況下,可能會有相當高的延遲(即2條消息需要發送,所以週期必須重複兩次,所有成本都涉及),但通常情況下,如果消息傳輸率較低,時間推移。

爲這種通信實現服務器端不是微不足道的,並且需要大量的異步通信,併發問題等。編寫一個可以在自己的線程上支持幾百個用戶的實現是相當容易的,但要擴展到數千個需要更多考慮的方法。

+0

感謝您的解釋! – powtac 2009-11-08 22:53:56

+0

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push – powtac 2009-11-08 23:02:22

+0

http://ajaxian.com/index.php?s=comet – powtac 2009-11-09 01:10:18

5

我注意到最後的答案是在2009年給出的。哦,我怎麼記得那些日子。但自那時以來發生了很多好事,所以我會添加這個只是爲了讓人們知道要尋找什麼。 HTTP 1.0提供了一個「保持活動」請求屬性,這意味着連接應該爲進一步的請求而維護。在HTTP 1.1中,這成爲默認值。如果你不想重複使用連接(如果你想要更好的話),你實際上必須選擇退出。

「WebSockets」的新標準實際上爲您提供了全雙工持久連接。所有最新版本的流行瀏覽器都支持WebSockets,如果您安裝Google Chrome Framework(即Google軟件實際上在做這項工作),您甚至可以在MSIE中使用它們。微軟表示IE在第10版中支持它,但我自己並沒有嘗試過。然後你需要的是連接到的東西,如http://highlevellogic.blogspot.se/2011/09/websocket-server-demonstration_26.html