网站开发之WebSocket
2019-03-11 本文已影响0人
平安喜乐698
目录
很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。
这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
HTML5 定义的 WebSocket 协议(基于TCP),能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息"Upgrade: WebSocket"表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。
示例
客户端代码
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>runoob.com</title>
<script type="text/javascript">
function WebSocketTest()
{
if ("WebSocket" in window)
{
alert("您的浏览器支持 WebSocket!");
// 创建并打开一个 web socket
var ws = new WebSocket("ws://192.168.100.25:8087");
ws.onopen = function()
{
// Web Socket连接建立时调用
alert("数据发送中...");
// 发送数据
ws.send("发送数据");
// 关闭连接
// ws.close();
};
ws.onmessage = function (evt)
{
// 接收到服务端数据时调用
alert("数据已接收..."+evt.data);
};
ws.error = function()
{
// websocket通信出错时调用
alert("出错...");
}
ws.onclose = function()
{
// websocket关闭连接时调用
alert("连接已关闭...");
};
}
else
{
// 浏览器不支持 WebSocket
alert("您的浏览器不支持 WebSocket!");
}
}
</script>
</head>
<body>
<div id="sse">
<a href="javascript:WebSocketTest()">运行 WebSocket</a>
</div>
</body>
</html>
服务端使用YYNetwork
服务端使用YYNetworkSocket对象的属性
1、readyState(只读属性) 表示连接状态,可以是以下值:
0 - 表示连接尚未建立。
1 - 表示连接已建立,可以进行通信。
2 - 表示连接正在进行关闭。
3 - 表示连接已经关闭或者连接不能打开。
2、bufferedAmount(只读属性) 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。