Web socket
1. 網(wǎng)絡協(xié)議
客戶端與服務端進行通信的協(xié)議
- HTTP協(xié)議 - 目前互聯(lián)網(wǎng)中最廣泛的協(xié)議
- SOCKET協(xié)議 - 應用于實時即時通信
2. HTTP協(xié)議的問題
無狀態(tài)
本次客戶端的請求,服務器端不知道客戶端的上次請求短連接
指通訊雙方有數(shù)據(jù)交互時玄坦,就建立一個連接瘤运,數(shù)據(jù)發(fā)送完成后捶朵,則斷開此連接,即每次連接只完成一項業(yè)務的發(fā)送锉屈。如果建立的是短鏈接,服務器無法主動給客戶端發(fā)送信息
3. web Socket
實現(xiàn)了用HTTP不容易實現(xiàn)的服務器端的數(shù)據(jù)推送等智能通訊技術(shù)
4. Web Socket的特點
- 這個連接是實時的闪水,也是永久的
- 服務端可以主動推送消息
- 服務端不需要輪詢客戶端的請求
- 服務器端與客戶端之間通信無需重新建立連接
5. 使用WorkerMan,設置socket客戶端
1)設置php環(huán)境變量
2)下載并解壓workerMan
http://www.workerman.net/workerman
workerMan學習文檔
http://doc3.workerman.net/getting-started/simple-example.html
3)在任意位置創(chuàng)建http_test.php文件任连,并將課件中的start.text文件中內(nèi)容復制到該文件中(位置任意悠就,能引用到Workerman文件中的Autoloader.php即可
- 運行上建的文件千绪,啟動workerMan
執(zhí)行workerMan
Web socket的使用
1. 調(diào)用 WebSocket 對象的構(gòu)造器來建立與服務器之間的通信連接
var webSocket = new WebSocket (“ws://127.0.0.1: 8005/socket”) ;
請求地址(url)不能再是http://開頭,Web Sockets的請求頭(url的開頭)
ws:// - Web Socket的縮寫
wss:// - 表示加密協(xié)議
2. 使用 WebSocket 對象的 send() 方法對服務器發(fā)送數(shù)據(jù)
webSocket.send (“data”);
send() 方法只能發(fā)送文本數(shù)據(jù)。,使用JSON對象把任何JavaScript,對象轉(zhuǎn)換稱文本數(shù)據(jù)后進行發(fā)送梗脾。
3. 通過WebSocket對象的close() 方法來關(guān)閉socket荸型,切斷通信連接:
webSocket.close( ) ;
4. Web Socket事件
-
通過獲取 onmessage事件來接收服務器傳來的數(shù)據(jù):
webSocket.onmessage = function( event ){ var data = event.data ; }
-
通過獲取 onopen 事件來監(jiān)聽 socket 的打開事件:
webSocket.onopen = function( event ){ }
-
通過獲取onclose事件來監(jiān)聽socket 的關(guān)閉事件:
webSocket.onclose = function( event ){ }
-
通過onerror事件,監(jiān)聽客戶端與服務器端連接出錯
webSocket.onerror = function( event ){ }
-
通過讀取 readyState 的屬性值來獲取 WebSocket 對象的狀態(tài)炸茧。
CONNECTING(數(shù)字值為0)瑞妇,表示正在連接。
OPEN(數(shù)字值為1)梭冠,表示已建立連接辕狰。
CLOSING(數(shù)字值為2),表示正在關(guān)閉連接控漠。
CLOSED(數(shù)字值為2)蔓倍,表示已關(guān)閉連接。S