反向ajax

weixin_34054866發表於2018-09-18

http通訊是單向通訊,也就是說如果沒有客戶端請求,伺服器是不能向客戶端傳送資訊的。
為了實現伺服器的推送等功能,引入了長輪詢和websocket.

什麼是長輪詢?
利用ajax,對伺服器端進行請求。伺服器hold住這個請求,把它長期儲存在一個執行緒安全的集合裡。這樣伺服器就可以在需要時在拿出請求,進行回應。
這裡注意的是js端,用了
function connect(){
$.ajax({
url:"longpolling?method=onOpen",
cache:false,
dataType:"text",
success:function(data){
connect();
alert(data);
}
});
}
這裡寫成了無線迴圈,但是在長連線中,由於後臺並不是在接收到請求後就立刻傳送回應,因此這個連結會被伺服器端一直持有。直到回應到達以後,success:function() 才會被執行。之所以在之後立刻重新執行的原因是,需要一個新的長連線再次發回給伺服器,讓伺服器端繼續保持直到下一次response的到來。

websocket的全雙工通訊。它是又H5提供,多個瀏覽器支援。
它使用ws或者是wss協議,直接保持一個長連線。
它允許和js建立一個遠端的連結。
並且為連結兩端提供了函式呼叫
send()向遠端端發資訊,close()關閉該連結。
監聽函式:onopen() 網路建立時觸發
onerror() 網路錯誤時觸發
onclose() 關閉時觸發
onmessage() 接受訊息時觸發
注意的是,類通過@ServerEndpoint()把自己作為一個伺服器端點,所以你的執行緒安全集合裡放的是這個端點類。
這個連結

當然也有很多開源框架幫助推送
https://www.cnblogs.com/best/p/5695570.html