有從服務器發送消息到客戶的另一種技術。你必須使用一個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請求。
嗨,這兩個鏈接都提供了使用只能在Google Chrome上運行的websocket的示例(截至目前,因爲它是HTML5規範)。我們需要我們的應用程序在任何瀏覽器上運行,因此正在尋找僅使用HTML4規範和JavaScipts的選項。 – Puneet 2011-04-21 06:18:07
請看我的編輯! – 2011-04-21 06:19:31
順便說一句,這是不正確的,websockets只能在Chrome上運行......你可以在任何webkit瀏覽器上運行websocket,opera 10.70 <=,firefox 4.0 beta 7 <= – 2011-04-21 06:21:47