WebSocket

WebSocket 是一种基于TCP的全双工通信协议,用于实现Web的实时通信。它避免了传统轮询和HTTP流的方式,提供了高效的数据传输。WebSocket对象包含onopen、onmessage、onerror和onclose事件,使得客户端和服务器可以双向通信。在WebSocket中,连接建立、数据发送和接收都涉及到特定的事件处理。在开发实时web应用时,WebSocket成为C/S和B/S架构下实现双向通信的重要工具。
实时web应用
轮询、基于HTTP流


传统Web实时通信方案


传统轮询
<METH HTTP-RQUIV="Refresh" CONTENT=12>
浏览器每隔12秒要重新加载一次该页面


Ajax轮询
利用Javascript的setTimeout函数,Ajax间隔一定的时间用XMLHttpRequest对象向服务器请求数据,看数据是否有改变,从而对页面的局部进行更新。


长轮询
有服务器端的信息是否有更新决定,如果没有更新数据,连接会保持一段时间周期直到有数据更新或时间过期。


Flash XMLSocket技术
XMLSocket类可以让装有Flash Player的计算机与由IP地址或域名标识的计算机进行通信,客户端不需要发送请求,服务器就可以在开放的连接上随时发送消息。


HTTP流方式
整个过程中只是使用一次HTTP连接请求。通过保持这个连接一直在打开的状态,进而周期性的向浏览器发送数据。
readstatechange事件属性


WebSocket协议是一个基于TCP的请求


全双工的双向通信:
服务器端与客户端将会呈现对等的效果,双方均能接收和发送消息,并且除非客户端或者服务器端的某一方主动关闭连接,否则这个连接会一直保持连接的状态


Websocket对象的socket绑定事件:
onopen--连接建立成功
onmessage--收到服务器信息
Onerror--连接出错
onclose--连接关闭


soket.onopen = function() {
//TODO:opened()
};


服务器端是没有onopen()方法的,为了把TCP套接字事件封装到WebSocket事件,需要在接收数据的过程中进行处理,WebSocket的数据帧协议是在底层data事件上封装的。
WebSocket.prototype.setSocket = function(socket){
this.socket = socket;
this.socket.on('data', this.receiver);
};


数据发送时也要做封装
WebSocket.prototype.send = function(data){
This._send(data);
}


当客户端调用send()方法向服务器端发送数据时,服务器端此时触发的是onmessage()事件;而当服务器端调用send()方法向客户端发送数据时,客户端此时是哦那message()事件被触发,也就是客户端和服务器的双向通信


WebSocket实现
实例化一个WebSocket对象,并且传入连接请求的地址url
var socket = new WebSocke("ws://www.example.com/server.php")
要给构造函数传入一个绝对地址的url参数


readyState
WebSocket.OPENING,表示正在连接
WebSocket.OPEN,表示已经建立连接
WebSocket.CLOSING,表示正在关闭连接
WebSocket.CLOSE,表示已经关闭了连接


任何时候调用close()方法都可以关闭WebSocket连接socket.close();


WebSocket客户端实例
var socket = new WebSocke.("ws://www.example.com/server.php");
socket.onopen = function(){
setInterval(function(){
if(socket.bufferedAmount == 0){
socket.send(getUpdateDate());
}
},50);
};
socket.onmessage = function(event){
//TODO:event.data
};


请求地址,连接打开触发onopen事件,每隔50毫秒向服务器端发送一次数据,此时也可以通过onmessage()方法接收服务器端传来的数据。


应用程序一般的两种架构模式:C/S(client/server), B/S(brower/server)


开发过程:
分析
设计
实现
测试调整
发布

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值