HTML5 - Web Socket使用详解(附样例)
作者:hangge | 2017-07-18 08:10
一、Web Socket 标准
1,基本介绍
(1)根据 Web Socket 标准,浏览器能够保持对 Web 服务器打开的连接,从而与服务器长时间进行交换数据。
(2)利用 Web Socket 我们可以开发许多特殊的应用,比如聊天室、大型多人游戏,或者端到端的协作工具。
2,兼容性
(1)桌面浏览器
- Chrome:完美支持
- Firefox:完美支持
- Safari:Safary 7 起支持
- IE:IE10 起支持(包括后面的 Edge 也支持)
- Opera:完美支持
(2)移动设备
- iOS:iOS 6.1 起支持
- Android:Andorid 4.4 起支持
3,测试当前浏览器是否支持
由于电脑网络设置的限制、防火墙或者杀毒软件等各种因素的影响。即使是在支持 Web Socket 的浏览器上运行也有可能出现问题。
如果不确定当前电脑是否能使用 Web Socket,可以访问这个网站测试一下:http://websocketstest.com/
访问后网站会尝试连接一个测试服务器,并且生成一个报告告诉你 Web Socket 是否在运行。
二、Web Socket 服务器
1,现成的 Web Socket 服务 url
本文主要演示 HTML5 的 Web Socket 客户端实现,服务端这里就使用现成的第三方服务器,地址如下:
这个服务器功能很简单,就是我们向它发送消息,它会再返回同样的消息。
2,Web Socket 测试页面
它还提供了一个简单的在线测试页面:http://www.websocket.org/echo.html
填上 Web Socket 地址进行连接后,就可以发送和接收数据消息了。
三、实现 Web Socket 客户端
1,实现步骤
(1)首先我们要创建 WebSocket 对象,传入一个 URL。URL 以 ws:// 开头,表示 Web Socket 连接协议。当然该 URL 仍然指向服务器上的一个 Web 应用(比如指向一个 php 脚本)
var socket = new WebSocket("ws://hangge.com/server.php");
注意:Web Socket 标准还支持以 wss:// 开头的 URL,表示安全、加密的连接(类似于请求网页时使用的 https:// 与 http:// 之间的关系)
(2)创建 WebSocket 对象后,页面就会尝试连接服务器。我们可以通过如下 4 个事件来处理消息业务:
- onOpen:在建立连接后触发
- onError:在出现问题时触发
- onMessage:在页面从服务器接收到消息时触发
- onClose:连接关闭时触发
(3)连接成功后,我们可以使用 WebSocket 对象的 send() 方法向服务器发送消息。使用 close() 方法关闭连接。
(4)WebSocket 对象还有个 readyState 属性,我们可以通过它的值来判断当前的 socket 状态:
- 0:连接还没建立
- 1:打开且准备就绪
- 2:关闭过程中
- 3:已关闭
2,效果图
(1)页面打开后会自动连接服务器。
(2)输入框填写内容后点击“发送”按钮,即可将内服发送到服务端。
(3)下方区域会实时显示出发送和接收的消息,以及连接情况。
(4)点击“断开”按钮,即可关闭与服务器的连接。
3,样例代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>hangge.com</title> <style> </style> <script type="text/javascript"> //用于填写发送消息的输入框 var messageBox; //用于显示消息的div容器 var messageLog; //WebSocket对象 var socket; //页面加载完毕 window.onload = function() { messageBox = document.getElementById('messageBox'); messageLog = document.getElementById('messageLog'); connect(); } //创建socket对象并绑定所有事件 function connect() { //创建socket对象 socket = new WebSocket("ws://echo.websocket.org"); //监听所有的Web socket事件 socket.onopen = connectionOpen; socket.onmessage = messageReceived; socket.onerror = errorOccurred; socket.onclose = connectionClosed; } //断开连接按钮点击 function disconnect(){ socket.close(); } //发送消息按钮点击 function sendMessage(){ //获取要发送的数据 var message = messageBox.value; //通过socket发送消息 socket.send(message); //告诉用户刚刚发生了什么 messageLog.innerHTML += "<br>发送:" + message; } //连接建立完毕事件响应 function connectionOpen(e) { messageLog.innerHTML += "<br>--- Socket连接成功 ---"; } //消息接收事件响应 function messageReceived(e){ messageLog.innerHTML += "<br>收到:" + e.data; } //错误事件响应 function errorOccurred(e){ messageLog.innerHTML += "<br>发生错误:" + e.data; } //连接关闭事件响应 function connectionClosed(e) { messageLog.innerHTML += "<br>--- Socket连接关闭 ---"; } </script> </head> <body> <input id="messageBox" type="text" /> <button onclick="sendMessage()">发送</button> <button onclick="disconnect()">断开</button> <div id="messageLog"></div> </body> </html>
全部评论(0)