重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
網(wǎng)頁一般是單向主動短鏈接,實時更新實在有些不便,即使一方掉線,另一方也不能及時感知。一般所謂的實時刷新,大多采用定時刷新(輪詢),或長輪詢的方式做,ajax用于更新數(shù)據(jù)確實是比較簡單方便的。
10年積累的網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計制作后付款的網(wǎng)站建設(shè)流程,更有丹陽免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
輪詢你就settimeout,長輪詢你就每次接收數(shù)據(jù)成功后,再來一次長輪詢。但你鏈接別人的數(shù)據(jù),了解一下供應(yīng)商的刷新機(jī)制、周期再做考慮。
當(dāng)然這些都是偽實時,真的實時用http協(xié)議是不合適的,你得用flash插件做。而你用的是api供應(yīng)商的東西,這條路就基本走不通了。
//頁面語句
var?userid?=?getElementById('#username');
var?passwd?=?getElementById('#password');
$.ajax({
url:'后臺處理地址',
dataType:'JSON',
type:'POST',
data:'username='+userid+'passwd='+passwd,
error:?function(){
//post失敗
}
success:?function(data)?{//post成功
if?(data.s=='ok')?{
//成功信息,處理語句
}else?{
//失敗信息,處理語句
}
}
});
//后臺語句
if?(count($volist)??0)?{//有數(shù)據(jù)
......//處理語句
$data?=?array('s'='ok','html'=$html,'page'='span?class="page"'.$show.'/span');
echo?json_encode($data);
}else?{//無數(shù)據(jù)
$html?=?"tr?class='tr'td?class='tc'?colspan='11'暫無數(shù)據(jù),等待添加~!/td/tr";
$data?=?array('s'='no','html'=$html);
echo?json_encode($data);
}
大概是這樣吧
一、socket協(xié)議的簡介
WebSocket是什么,有什么優(yōu)點(diǎn)
WebSocket是一個持久化的協(xié)議,這是相對于http非持久化來說的。應(yīng)用層協(xié)議
舉個簡單的例子,http1.0的生命周期是以request作為界定的,也就是一個request,一個response,對于http來說,本次client與server的會話到此結(jié)束;而在http1.1中,稍微有所改進(jìn),即添加了keep-alive,也就是在一個http連接中可以進(jìn)行多個request請求和多個response接受操作。然而在實時通信中,并沒有多大的作用,http只能由client發(fā)起請求,server才能返回信息,即server不能主動向client推送信息,無法滿足實時通信的要求。而WebSocket可以進(jìn)行持久化連接,即client只需進(jìn)行一次握手,成功后即可持續(xù)進(jìn)行數(shù)據(jù)通信,值得關(guān)注的是WebSocket實現(xiàn)client與server之間全雙工通信,即server端有數(shù)據(jù)更新時可以主動推送給client端。
二、介紹client與server之間的socket連接原理
1、下面是一個演示client和server之間建立WebSocket連接時握手部分
2、client與server建立socket時握手的會話內(nèi)容,即request與response
a、client建立WebSocket時向服務(wù)器端請求的信息
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket //告訴服務(wù)器現(xiàn)在發(fā)送的是WebSocket協(xié)議
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== //是一個Base64 encode的值,這個是瀏覽器隨機(jī)生成的,用于驗證服務(wù)器端返回數(shù)據(jù)是否是WebSocket助理
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin:
b、服務(wù)器獲取到client請求的信息后,根據(jù)WebSocket協(xié)議對數(shù)據(jù)進(jìn)行處理并返回,其中要對Sec-WebSocket-Key進(jìn)行加密等操作
HTTP/1.1 101 Switching Protocols
Upgrade: websocket //依然是固定的,告訴客戶端即將升級的是Websocket協(xié)議,而不是mozillasocket,lurnarsocket或者shitsocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= //這個則是經(jīng)過服務(wù)器確認(rèn),并且加密過后的 Sec-WebSocket-Key,也就是client要求建立WebSocket驗證的憑證
Sec-WebSocket-Protocol: chat
3、socket建立連接原理圖:
三、PHP中建立websocket的過程講解
SocketService.php:
web.html:
有兩種實現(xiàn)方法:
1、你可以用PHP服務(wù)器推技術(shù),當(dāng)數(shù)據(jù)發(fā)生變化時,主動推送到頁面顯示。相關(guān)技術(shù)可以參考文檔。百度也很多。
2、你可以用Javascript,每過一秒鐘,使用Ajax獲取數(shù)據(jù),一秒鐘刷新一次,也可以實現(xiàn)的。
第一種我也不會。第二種相信你可以的。
while的話是循環(huán),你用了只會一行行加