2011-04-21 90 views
4

我正在嘗試使用AppWeb開源Web服務器開發交互式聊天應用程序。
我需要有一些機制可以使Web服務器向客戶端發送更新的消息,以便當遠程使用者發送將在客戶端自動更新的消息時。如何使用JavaScript與Web服務器交互

有一些方法可以使用HTML5 Web套接字和服務器發送的事件執行此操作。
但我們需要在HTML和JavaScript中實現它,而不是HTML5。

所以我需要一些池技術來保持我的Web服務器的新事件。

那麼我應該如何使用套接字在Javascript中編寫池化機制。
它應該如何在服務器端實現?

謝謝!

回答

2

已經有一些例子在那裏...取決於服務器端,你可以去java-hello-worldphp-hello-world或...

,如果你不能使用websocket,你 必須 能按照舊的方式,通過window.setInterval創建一個間隔,然後用例如。 $.ajax() 我不知道任何其他替代雙向連接(的WebSocket)... 看到kayahrs answer

就像你問它:
$.ajax()是做xhrjQuery方式。基本上,它觸發了一個異步請求到服務器,該服務器返回xml或json或文本或...(不管)。當這個請求返回時,支持的eventHandler被激發,你可以對響應做出反應。你也可以使用普通的xhr,但處理原始的xhr有點尷尬。
jQuery支持$.ajax()的一些速記超載,例如。 $.getJSON()$.get(),...

樣本實施:

$.get("test.cgi", function(data){ 
    alert("Data Loaded: " + data); 
}); 
+0

嗨,這兩個鏈接都提供了使用只能在Google Chrome上運行的websocket的示例(截至目前,因爲它是HTML5規範)。我們需要我們的應用程序在任何瀏覽器上運行,因此正在尋找僅使用HTML4規範和JavaScipts的選項。 – Puneet 2011-04-21 06:18:07

+0

請看我的編輯! – 2011-04-21 06:19:31

+0

順便說一句,這是不正確的,websockets只能在Chrome上運行......你可以在任何webkit瀏覽器上運行websocket,opera 10.70 <=,firefox 4.0 beta 7 <= – 2011-04-21 06:21:47

1

有從服務器發送消息到客戶的另一種技術。你必須使用一個iframe來連接到一個不關閉連接的PHP腳本(或者你在服務器端使用的任何技術)。 PHP腳本隨後發送JavaScript消息,每當必須向客戶端通知某事時。在每條消息之後,服務器刷新輸出流以強制數據真正找到到達客戶端的路徑,並且不會被某些輸出緩衝區緩存。這是在iframe裝載的PHP腳本的一個小例子代碼(未測試和不完整,只是爲了顯示基礎):

<html> 
    <body> 
    <script type="text/javascript"> 

     function receiveMsg(data) 
     { 
      // Do something with the data, for example send it to some function 
      // in the parent frame (Where your chat application lives) 
     } 

     <?php 

     while (true) // You may also implement some abort state which should 
        // be checked here 
     { 
      $data = waitForData(); // This is your magic function on the server 
           // which waits for data to be send to the client 
      echo "receiveMsg('" . $data . "');"; // Let's say data is just a string. 
              // You may want to use JSON instead 
      flush(); 
     } 
     ?> 
    </script> 
    </body> 
</html> 

這種方法的優點是,它不依賴於投票。所以你不必每隔x秒就向服務器發送請求。而當你在服務器端做正確的事情時,一個用戶發送的消息儘可能快地被其他用戶接收,而不是在x秒後。缺點是你有每個聊天用戶的永久HTTP連接。但是這可能需要較少的服務器資源,然後每個聊天用戶每分鐘有數十個完整的HTTP請求。