关于WebSocket

  1. 什么是WebSocket?
    WebSocket是HTML5提供的一种在【单个TCP连接】上进行【全双工】通讯的【网络协议】。
    WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许【服务端主动向客户端推送数据】。在 WebSocket API 中,浏览器和服务器只需要完成【一次握手】,两者之间就直接可以创建【持久性的连接】,并进行【双向数据传输】。

注:Socket是套节字的意思。

网络协议:数据在网络上传输时客户端和服务器双方遵守的协议。网络协议分为七层协议:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

TCP协议是传输层协议,IP协议是传输层协议,HTTP是应用层协议。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,即网络编程的一个api套件。确切来说它不是真正的网络协议。而sokcket编程却是标准的应用层开发。

全双工(Full Duplex)是指在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的网卡一般都支持全双工。
半双工(Half Duplex),所谓半双工是指一段时间内,只有一种动作发生,例如一条窄路,而只有一辆车可以通行,如果有两辆车相对时,在这种情况下,只有一辆车先开,等到另一辆车的通过后再开,这个例子生动地说明了原始半双工。早期对讲机、早期集线器等设备都是基于半双工产品的。随着技术的不断进步,半双工会逐渐退出历史舞台。

HTTP协议有多个版本,存在区别。主流协议是HTTP1.1,它以下版本,HTTP连接为【短连接】,TCP 连接发送信息等待接受信息后断开,所以HTTP1.1 是半双工。建立长连接,出现多路复用,可先后发送多个HTTP请求,不用等待回复,但是回复按顺序一个一个回复。HTTP2.0是全双工,一个消息发送后不用等待接受,第二个消息可以直接发送

HTTP协议一般是客户端主动向服务器请求。如果让服务器主动向客户端推送,需要技巧(长连接/长轮询long-polling)。

HTTP协议要求客户端和服务器经过三次握手,才能完成一次通讯。

HTTP协议是无状态的,第一次通讯结束,客户端和服务器断开连接,要使双向建立持久性连接,需要技巧(长连接/长轮询 long loop)。

  1. WebSocket和HTTP的异同?
    WebSocket一次握手,HTTP协议三次握手。
    WebSocket全双工通讯,HTTP协议不同版本有全双工,也有半双工。
    WebSocket服务器主动向客户端推送数据,HTTP协议一般是客户端请求后,服务器响应数据。
    WebSocket可以让客户端和服务器建立持久性连接,HTTP协议默认是短连接。

  2. WebSocket应用。
    在WebSocket协议之前,有三种实现双向通信的方式:轮询(polling)、长轮询(long-polling)和iframe流(streaming)。

  3. Socket.IO介绍:
    客户端浏览器Browser和服务器WebServer间的实时数据传输是一个很重要的需求,但最早只能通过AJAX轮询方式实现。在WebSocket标准没有推出之前,AJAX轮询是一种可行的方案。H5推出了原生的WebSocket对象用来实现双工实时通讯。

Socket.IO提供了基于事件的实时双向通讯。Socket.IO是一个跨浏览器支持WebSocket的实时通讯的JS脚本库。目前在前端实时双工通讯领域应用较广。

  1. 安装和下载
    客户端脚本下载:https://www.bootcdn.cn/socket.io/
    服务器端安装: npm/cnpm install socket.io --save或yarn add socket.io

实例:
https://mp.weixin.qq.com/s?__biz=MjM5NTg2NTU0Ng==&mid=2656602270&idx=3&sn=3b388e61ff4cedf7f323e7d709136ee9&chksm=bd5dde3b8a2a572d1e1d4dde5e679e45f667f36b1610ab3f84b52d03fc694a47abda72e8208b&mpshare=1&scene=23&srcid=03221El882LrH5YNzQyIF4b8#rd

https://www.jianshu.com/p/00e4decb7ac2

官方文档:
https://socket.io/
https://github.com/socketio/socket.io

参考文档:
http://www.runoob.com/html/html5-websocket.html
https://www.cnblogs.com/fuqiang88/p/5956363.html
https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001472780997905c8f293615c5a42eab058b6dc29936a5c000

网络七层协议了解:
https://baike.baidu.com/item/网络七层协议/6056879?fr=aladdin
https://www.cnblogs.com/carlos-mm/p/6297197.html
https://www.cnblogs.com/dongzhiquan/archive/2011/12/15/2289438.html

各个网络层涉及的协议:
https://www.cnblogs.com/weiliuyby/p/8030175.html

全双工,半双工概念:
https://blog.csdn.net/godloveyuxu/article/details/73089780

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值