pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

利用html5的websocket實(shí)現(xiàn)websocket聊天室_html5教程技巧

利用html5的websocket實(shí)現(xiàn)websocket聊天室_html5教程技巧HTML5中文學(xué)習(xí)網(wǎng),是中國(guó)最大的HTML5中文門(mén)戶,為廣大HTML5愛(ài)好者提供各種HTML5資料,包括HTML5網(wǎng)站、HTML5資訊、HTML5應(yīng)用、HTML5游戲、HTML
點(diǎn)評(píng):利用html5的websocket實(shí)現(xiàn)一個(gè)聊天室,大家可以參考使用

什么是websocket

 WebSocket 協(xié)議是html5引入的一種新的協(xié)議,其目的在于實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信。看了上面鏈接的同學(xué)肯定對(duì)過(guò)去怎么低效率高消耗(輪詢(xún)或comet)的做此事已經(jīng)有所了解了,而在websocket API,瀏覽器和服務(wù)器只需要要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。同時(shí)這么做有兩個(gè)好處
 
1.通信傳輸字節(jié)減少:比起以前使用http傳輸數(shù)據(jù),websocket傳輸?shù)念~外信息很少,據(jù)百度說(shuō)只有2k
 
2.服務(wù)器可以主動(dòng)向客戶端推送消息,而不用客戶端去查詢(xún)
 
關(guān)于概念和好處,網(wǎng)上到處都是,不再贅述,簡(jiǎn)單看看其原理,然后動(dòng)手寫(xiě)一個(gè)web版聊天室吧
 
握手

除了TCP連接的三次握手,websocket協(xié)議中客戶端與服務(wù)器想建立連接需要一次額外的握手動(dòng)作,在最新版的協(xié)議中是這個(gè)樣子的
 
客戶端向服務(wù)器發(fā)送請(qǐng)求
 

復(fù)制代碼
代碼如下:

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 127.0.0.1:8080
Origin: <a >http://test.com</a>
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: OtZtd55qBhJF2XLNDRgUMg==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36

服務(wù)器給出響應(yīng)
 

復(fù)制代碼
代碼如下:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: xsOSgr30aKL2GNZKNHKmeT1qYjA=

在請(qǐng)求中的“Sec-WebSocket-Key”是隨機(jī)的,服務(wù)器端會(huì)用這些數(shù)據(jù)來(lái)構(gòu)造出一個(gè)SHA-1的信息摘要。把“Sec-WebSocket-Key”加上一個(gè)魔幻字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”。使用 SHA-1 加密,之后進(jìn)行 BASE-64編碼,將結(jié)果做為 “Sec-WebSocket-Accept” 頭的值,返回給客戶端(來(lái)自維基百科)。
 
websocket API

經(jīng)過(guò)握手之后瀏覽器與服務(wù)器建立連接,兩者就可以互相通信了。websocket的API真心很簡(jiǎn)單,看看W3C的定義
 

復(fù)制代碼
代碼如下:

enum BinaryType { "blob", "arraybuffer" };
[Constructor(DOMString url, optional (DOMString or DOMString[]) protocols)]
interface WebSocket : EventTarget {
readonly attribute DOMString url;

// ready state
const unsigned short CONNECTING = 0;
const unsigned short OPEN = 1;
const unsigned short CLOSING = 2;
const unsigned short CLOSED = 3;
readonly attribute unsigned short readyState;
readonly attribute unsigned long bufferedAmount;

// networking
attribute EventHandler onopen;
attribute EventHandler onerror;
attribute EventHandler onclose;
readonly attribute DOMString extensions;
readonly attribute DOMString protocol;
void close([Clamp] optional unsigned short code, optional DOMString reason);

// messaging
attribute EventHandler onmessage;
attribute BinaryType binaryType;
void send(DOMString data);
void send(Blob data);
void send(ArrayBuffer data);
void send(ArrayBufferView data);
};

創(chuàng)建websocket
 
復(fù)制代碼
代碼如下:

ws=new WebSocket(address); //ws://127.0.0.1:8080

 
調(diào)用其構(gòu)造函數(shù),傳入地址,就可以創(chuàng)建一個(gè)websocket了,值得注意的是地址協(xié)議得是ws/wss
 
關(guān)閉socket

復(fù)制代碼
代碼如下:

ws.close();

 
調(diào)用webservice實(shí)例的close()方法就可以關(guān)閉webservice,當(dāng)然也可以傳入一個(gè)code和string說(shuō)明為什么關(guān)了
 
幾個(gè)回調(diào)函數(shù)句柄
 
由于其異步執(zhí)行,回調(diào)函數(shù)自然少不了,有四個(gè)重要的
 
onopen:連接創(chuàng)建后調(diào)用
onmessage:接收到服務(wù)器消息后調(diào)用
onerror:出錯(cuò)時(shí)調(diào)用
onclose:關(guān)閉連接的時(shí)候調(diào)用

看名字就知道是干什么的了,每個(gè)回調(diào)函數(shù)都會(huì)傳入一個(gè)Event對(duì)象,可以通過(guò)event.data訪問(wèn)消息
 
使用API
 
我們可以在創(chuàng)建socket成功后為其回調(diào)函數(shù)賦值
 

復(fù)制代碼
代碼如下:

ws=new WebSocket(address);
ws.onopen=function(e){
var msg=document.createElement('div');
msg.style.color='#0f0';
msg.innerHTML="Server > connection open.";
msgContainer.appendChild(msg);
ws.send('{<'+document.getElementById('name').value+'>}');

 也可以通過(guò)事件綁定的方式

復(fù)制代碼
代碼如下:

ws=new WebSocket(address);
ws.addEventListener('open',function(e){
var msg=document.createElement('div');
msg.style.color='#0f0';
msg.innerHTML="Server > connection open.";
msgContainer.appendChild(msg);
ws.send('{<'+document.getElementById('name').value+'>}');

客戶端實(shí)現(xiàn)
其實(shí)客戶端的實(shí)現(xiàn)比較簡(jiǎn)單,除了websocket相關(guān)的幾句就是一些自動(dòng)focus、回車(chē)鍵事件處理、消息框自動(dòng)定位到底部等簡(jiǎn)單功能,不一一說(shuō)明了


【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

主站蜘蛛池模板: DAIKIN电磁阀-意大利ATOS电磁阀-上海乾拓贸易有限公司 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器| 空压机网_《压缩机》杂志| 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 精密冲床,高速冲床等冲压设备生产商-常州晋志德压力机厂 | 滚珠丝杆升降机_螺旋升降机_丝杠升降机-德迈传动 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 智慧物联网行业一站式解决方案提供商-北京东成基业 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 行星齿轮减速机,减速机厂家,山东减速机-淄博兴江机械制造 | 冷水机-冰水机-冷冻机-冷风机-本森智能装备(深圳)有限公司 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 物流公司电话|附近物流公司电话上门取货 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 即用型透析袋,透析袋夹子,药敏纸片,L型涂布棒-上海桥星贸易有限公司 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 立式硫化罐-劳保用品硫化罐-厂家直销-山东鑫泰鑫硫化罐厂家 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | ZHZ8耐压测试仪-上海胜绪电气有限公司| 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | 手表腕表维修保养鉴定售后服务中心网点 - 名表维修保养 |