2012-12-03 29 views
2

這似乎是一個奇怪的問題,但我真的很困惑,因爲當下載this example from Tornado我認爲:okey,我運行它,它會工作!但問題是,它很費事,因爲我在離線模式下測試,並且dident在緩存中有jQuery!爲什麼Javascript對Websocket來說很重要?

並發現this from SO

阿賈克斯 - 創建連接到服務器發送一些數據(簡化爲GET/POST),並接收響應。

長輪詢 - 創建與服務器的連接,發送一些數據,保持連接並有時從服務器接收一些數據。短時間保持連接,並定期重新連接。在服務器端,它仍然像Web Page一樣。

WebSockets - 創建連接到服務器,並保持儘可能長的需要。服務器或客戶端可以很容易地制動。雙向發送數據。 WebSockets通常爲每條消息使用掩碼,因此數據被簡單加密。

那麼,爲什麼總是存在Javascript底層,即使它是與服務器端相關的東西?

+2

爲什麼javascript?什麼時候是最後一次以純HTML格式編寫'for()'循環?什麼時候你最後一次可以定義一個數組並在HTML中對該數組執行一些push/pop操作? –

+1

我認爲這些處理使用服務器端語言,然後轉換爲純HTML? –

+2

沒有。確切地說,客戶端瀏覽器EVER如何從服務器請求某些內容(除了用戶單擊鏈接或提交表單)WITHOUT JavaScript? –

回答

4

JavaScript僅對瀏覽器中的WebSocket很重要,因爲瀏覽器已在JavaScript中實現了WebSocket API(請參閱RFC 6455)。所以如果你想從HTML5頁面訪問WebSocket,你需要編寫JavaScript。但是,您也可以使用Java Applet在Java客戶端中執行WebSocket。 (雖然applet已經不受歡迎了。)另外,可以從本地應用程序(包括移動iOS)執行WebSocket。

許多WebSocket服務器平臺試圖支持多種類型的客戶端。例如,Kaazing不僅在JavaScript中提供客戶端,而且在.NET,Silverlight,Java和Objective-C中提供客戶端。 WebSocket的基本思想是你編寫你的服務器邏輯一次,然後你可以「收穫」你在不同客戶端做的事情。

請記住,如果您打算使用WebSocket,則需要使用基本HTML標記以外的編程語言,因爲您需要處理通過WebSocket連接傳入的數據。這些數據可以通過許多不同的協議實現,如AMQP,STOMP,socket.IO,WAMP和其他許多協議。對於每種類型的協議,實際上您都需要一個可以處理協議的不同庫。

+0

謝謝,我會嘗試使用龍捲風來學習它,它有websocket,並且似乎有與龍捲風一起用來模擬websocket的庫? –

+1

它看起來像Tornado有一個基本的webSocket類處理程序:tornado.websocket.WebSocketHandler,所以這就是你想要開始的地方。如果有人在服務器端實現了任何協議庫,您將不得不環顧四周。例如,如果您發現stomp的服務器端實現,那麼您只需要爲瀏覽器端尋找JS stomp庫,以及iOS和其他平臺的相應庫。當然,如果你只是想做簡單的服務器推送,那麼基本的API可能就足夠了,但你可以用更好的協議做更多的事情。 – Axel

+0

發現這個https://github.com/MrJoes/tornadio2我認爲它會簡化工作? –

3

Javascript最初是作爲一種將客戶端表單驗證和小動態用戶交互添加到網頁的方式開始的。然而,現代Javascript是一種非常強大的語言(有很多煩惱),可以在瀏覽器或服務器上運行(使用諸如Node.js之類的語言)。現代瀏覽器提供了許多隻適用於Javascript的API(除非Web應用程序,畫布,Web GL,Web Audio API,XMLHTTPRequest(即AJAX),定時器,事件等等)支持另一種類似Dart的語言。

瀏覽器的舊概念是能夠下載和呈現靜態HTML標記文檔的程序。現在將瀏覽器視爲主要用於執行Web應用程序的操作系統+庫+ API是更有用的。換句話說,現代Web瀏覽器的主要目的是執行Javascript併爲Javascript提供API。 HTML的主要用途是指定要加載的初始JavaScript文件以啓動Web應用程序。 HTML和CSS也可以用來定義DOM樹的初始狀態(JavaScript API的可見部分)。但是,您可以使用HTML和CSS靜態指定所有內容,也可以使用Javascript動態生成。

在這種情況下,WebSockets是瀏覽器中的一個API,它使Web應用程序(即瀏覽器中運行的Javascript程序)能夠向WebSocket服務器建立低延遲的雙向通信通道。

更新

爲什麼他們不只是說 「的WebSockets是在Javascript版本X.X.X可用」?

  1. JavaScript不僅僅適用於網絡(例如Node.js),這些API不僅適用於Javascript。例如,如果您的Chrome版本啓用了Dart,則可以從Dart獲得這些相同的API。腳本標籤允許使用其他語言,以便將來的瀏覽器可以運行其他可以訪問這些API的語言。
  2. Javascript是由ECMA定義的語言,WebSockets,Web Workers等是由W3C定義的瀏覽器API作爲HTML5的一部分。瀏覽器版本確定哪些Web API可用以及Javascript的版本。您可能使用支持新API的舊版Javascript的瀏覽器,反之亦然。
+0

啊謝謝你,所以他們爲什麼不這樣說:websocket是javascript版本x.xx中的新東西,所以像我這樣的人會明白:p –

+1

@AbdelouahabPp,好問題!我已經更新了答案以反映這一點。 – kanaka

+0

所以它是HTML版本的Javascript,謝謝你的澄清:) –

相關問題