WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双通讯的协议
在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器时间就形成一条快速通道,两者之间就直接可以数据相互传送
浏览器通过JavaScript向服务器发出建立WebSocket连接的请求,连接建立后,客户端和服务器端就可以通过TCP连接直接交换数据
当你获取WebSocket连接后,可以通过send()方法向服务器发送数据,并通过onmessage事件来接受服务器返回的数据
一下API用于创建WebSocket对象
var Socket = new WebSocket(url, [protocol]);
以上代码中第一个参数url,指定连接url,第二个参数protocol是可选的,制定了可接受的自协议
WebSocket属性
一下是WebSocket对象的属性,假定我们使用了以上代码创建了 Socket对象
Socket.readyState:
只读属性readyState表示连接状态,可以使以下值:
0-表示连接尚未建立
1-便是连接已建立,可进行通信
2-表示连接正在进行关闭,
3-表示连接已经关闭或者连接不能打开
WebSocket事件
事件 事件处理程序 描述
open Socket.onopen 连接建立时触发
message Socket.onmessage 客户端接收服务端数据时触发
error Socket.onerror 通信发生错误时触发
close Socket.onclose 连接关闭时触发
WebSocket方法
方法 描述
Socket.send() 使用连接发送数据
Socket.close() 关闭连接
WebSocket实例
WebSocket协议本质上是一个基于TCP的协议
未来建立一个WebSocket连接,客户端浏览器首先要向服务器发送一个HTTP请求,这个请求和通常的HTTP请求不同,包含一些附加头消息,其中附加头消息 "Upgrade:WebSocket"表明这是一个申请协议升级的HTTP请求,服务器解析这些附加的头消息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。
客户端的HTML和JavaScript
目前大部分浏览器支持WebSocket()接口,你可以在以下浏览器中尝试实例: Chrome, Mozilla, Opera 和 Safari。
runoob_websocket.html 文件内容
<!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://localhost:9998/echo");
ws.onopen = function()
{
// Web Socket 已连接上,使用 send() 方法发送数据
ws.send("发送数据");
alert("数据发送中...");
};
ws.onmessage = function (evt)
{
var received_msg = evt.data;
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>
安装pywebsocket
在执行以上程序前,我们需要创建一个支持WebSocket的服务,从 pywebsocket 下载 mod_pywebsocket ,或者使用 git 命令下载:
git clone https://github.com/google/pywebsocket.git
mod_pywebsocket 需要 python 环境支持
mod_pywebsocket 是一个 Apache HTTP 的 Web Socket扩展,安装步骤如下:
1.解压下载文件
2.进入pywebsocket目录
3.执行命令
$ python setup.py build
$ sudo python setup.py install
4.查看文档说明
$ pydoc mod_pywebsocket
开启服务
在 pywebsocket/mod_pywebsocket 目录下执行以下命令:
$ sudo python standalone.py -p 9998 -w ../example/
以上命令会开启一个端口号为 9998 的服务,使用 -w 来设置处理程序 echo_wsh.py 所在的目录。
现在我们可以在 Chrome 浏览器打开前面创建的 runoob_websocket.html 文件。如果你的浏览器支持 WebSocket(), 点击"运行 WebSocket",你就可以看到整个流程各个步骤弹出的窗口,流程 Gif 演示:
在我们停止服务后,会弹出 "连接已关闭..."。