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)文檔推薦

主站蜘蛛池模板: 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 热风机_工业热风机生产厂家上海冠顶公司提供专业热风机图片价格实惠 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 南昌旅行社_南昌国际旅行社_南昌国旅在线 | 玻璃钢板-玻璃钢防腐瓦-玻璃钢材料-广东壹诺 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 不锈钢监控杆_监控立杆厂家-廊坊耀星光电科技有限公司 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 冷却塔厂家_冷却塔维修_冷却塔改造_凉水塔配件填料公司- 广东康明节能空调有限公司 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 免费网站网址收录网_海企优网站推荐平台| 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 冷水机-冰水机-冷冻机-冷风机-本森智能装备(深圳)有限公司 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 防爆电机-高压防爆电机-ybx4电动机厂家-河南省南洋防爆电机有限公司 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 亿诺千企网-企业核心产品贸易 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 光照全温振荡器(智能型)-恒隆仪器| 剪刃_纵剪机刀片_分条机刀片-南京雷德机械有限公司 |