之前看到別人的網頁打開后都有個聊天框,可以與同時在網上的網友聊點簡單話題,於是便找了個最簡單的方法
使用js,客戶端 打開頁面,不斷的給服務器發送請求來得到 新的消息
用JavaScript實現的輪詢的優點和缺點:
1. 優點:很容易實現,不需要任何服務器端的特定功能,且在所有的瀏覽器上都能工作。
2. 缺點:這種方法很少被用到,因為它是完全不具伸縮性的。試想一下,在100個客戶端每個都發出2秒鍾的輪詢請求的情況下,所損失的帶寬和資源數量,在這種情況下30%的請求沒有返回數據。
代碼實現:頁面使用了 Uediter 編輯器,后台存儲最新消息,獲取最新消息
rootroom.js
var login = true; //發送請求函數 function sendRequest() { if (ueditor.hasContents()) { ueditor.sync(); $("#chatMsg").val(ueditor.getContent()); } //input是個全局變量,就是用戶輸入聊天信息的單行文本框 var chatMsg = $("#chatMsg").val(); var datas="chatMsg=" + chatMsg; $.ajax({ type: "post", url: "/chat", data: datas, datatype: "text", success:function(data){ if(data=="nologin") { login=false; alert("您還沒有登錄,請先登錄"); window.location.href="/index.jsp"; } else { login=true; //使用chatArea多行文本域顯示服務器響應的文本 $("#chatArea").html(data); } //清空輸入框的內容 $("#chatMsg").val(""); ueditor.setContent(""); } }); } function sendEmptyRequest() { var datas=""; $.ajax({ type: "post", url: "/chat", data: datas, datatype: "text", success:function(data){ if(data=="nologin") { login=false; alert("您還沒有登錄,請先登錄"); window.location.href="/index.jsp"; } else { login=true; //使用chatArea多行文本域顯示服務器響應的文本 $("#chatArea").html(data); } } }); //指定0.8s之后再次發送請求 if(login==true) { setTimeout("sendEmptyRequest()" , 800); } } function enterHandler(event) { //獲取用戶單擊鍵盤的“鍵值” var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; //如果是回車鍵 if (keyCode == 13) { sendRequest(); } }