赞
踩
1.应用场景
主要用于在浏览器和服务器之间建立一个不受限的双向通信的通道。 比如说,服务器可以在任意时刻发送消息给浏览器。 |
2.学习/操作
1. 文档
视频教程 -- 推荐,当你看文档看不下去的时候,推荐看看视频「选择适合自己的倍速」 2. 整理输出1.介绍WebSocket是 HTML5 新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道。 比如说,服务器可以在任意时刻发送消息给浏览器。 出现历史原因为什么传统的HTTP协议不能做到WebSocket实现的功能? 这是因为HTTP协议是一个请求-响应协议,请求必须先由浏览器发给服务器,服务器才能响应这个请求,再把数据发送给浏览器。 换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的。 这样一来,要在浏览器中搞一个实时聊天,在线炒股(不鼓励),或者在线多人游戏的话就没法实现了,只能借助Flash这些插件。 也有人说,HTTP协议其实也能实现啊,比如用轮询或者Comet。 轮询是指浏览器通过JavaScript启动一个定时器,然后以固定的间隔给服务器发请求,询问服务器有没有新消息。这个机制的缺点一是实时性不够,二是频繁的请求会给服务器带来极大的压力。 Comet本质上也是轮询,但是在没有消息的情况下,服务器先拖一段时间,等到有消息了再回复。 这个机制暂时地解决了实时性问题,但是它带来了新的问题:以多线程模式运行的服务器会让大部分线程大部分时间都处于挂起状态,极大地浪费服务器资源。另外,一个HTTP连接在长时间没有数据传输的情况下,链路上的任何一个网关都可能关闭这个连接,而网关是我们不可控的,这就要求Comet连接必须定期发一些ping数据表示连接“正常工作”。
问题:服务器不能直接请求客户端吗?
WebSocket协议WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接。 我们来看看WebSocket连接是如何创建的。 首先,WebSocket连接必须由浏览器发起,因为请求协议是一个标准的HTTP请求,格式如下:
该请求和普通的HTTP请求有几点不同:
随后,服务器如果接受该请求,就会返回如下响应:
该响应代码 版本号和子协议规定了双方能理解的数据格式,以及是否支持压缩等等。如果仅使用WebSocket的API,就不需要关心这些。 现在,一个WebSocket连接就建立成功,浏览器和服务器就可以随时主动发送消息给对方。消息种类消息有两种,一种是文本,一种是二进制数据。 通常,我们可以发送JSON格式的文本,这样,在浏览器处理起来就十分容易。 为什么WebSocket连接可以实现全双工通信而HTTP连接不行呢?实际上HTTP协议是建立在TCP协议之上的,TCP协议本身就实现了全双工通信,但是HTTP协议的请求-应答机制 限制 了全双工通信。 WebSocket连接建立以后,其实只是简单规定了一下:接下来,咱们通信就不使用HTTP协议了,直接互相发数据吧。 安全的WebSocket连接机制和HTTPS类似。 首先,浏览器用 2.实现浏览器很显然,要支持WebSocket通信,浏览器得支持这个协议,这样才能发出 目前,支持WebSocket的主流浏览器如下:
服务器由于WebSocket是一个协议,服务器具体怎么实现,取决于所用编程语言和框架本身。 Node.js本身支持的协议包括TCP协议和HTTP协议,要支持WebSocket协议,需要对Node.js提供的HTTPServer做额外的开发。已经有若干基于Node.js的稳定可靠的WebSocket实现,我们直接用npm安装使用即可。 PHP 支持的协议如下: 也可以操作TCP协议,但是需要安装扩展php_socket PHP编程实现的TCP服务端和客户端的功能-php教程-PHP中文网 这里简单使用socket进行客户端服务端通信 1. 启动服务器 2. 启动客户端 3. 客户端发起消息请求 可以看到客户端,立刻收到服务端响应 服务端,则收到了客户端的请求消息,并回复~ 上面不论是客户端,还是服务端只要有一个断掉,连接就会断掉,如server断掉,client 请求,程序出现报错~ 3.个人实践后端语言
nodeJS 聊天室:
效果如下: 分别开不同浏览器窗口【或者chrome的无痕窗口】,输入 localhost:3000 回车即可
后续补充 ... |
3.问题/补充
后续补充
...
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。