websocket和通信
最近默默的在学websocket,推荐的当然是阮一峰的博客了,其中也学到了不少 可以去看看咯 http://www.ruanyifeng.com/blog/2017/05/websocket.html
WebSocket 协议在2008年诞生,2011年成为国际标准。
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,就是终身平等的 哈哈。
减少通信量 :client 第一次需要与 server 建立连接,当 server 确认连接之后,两者便一直处于连接状态。
直到一方断开连接,WebSocket 连接才断开,与HTTP相比,websocket首部信息很小,连接的开销减少,通信量减少
其实也有其他的通信:
HTTP的缺陷
- 请求只能从客户端开始。客户端不可以接收除响应以外的指令(通信只能由客户端发起)
- 请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
轮询(polling)
- 在第一次请求后,服务器端没有数据更新,造成通信浪费,资源消耗
- 当发送请求间隔加大可缓解通信的浪费,但当服务器端更新数据很快时,又不满足实时性
- 每隔一段时间向服务器发送http请求,不论是否更新,都将数据发送给客户端
Ajax
实现页面局部加载的异步通信,减少了传输数据量,但http协议本身缺陷仍然存在
websocket
包括的特点有:
(1)建立在 TCP 协议之上,服务器端的实现比较容易。
(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
(3)数据格式比较轻量,性能开销小,通信高效。
(4)可以发送文本,也可以发送二进制数据。
(5)没有同源限制,客户端可以与任意服务器通信。
(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
下面说下基本的用法咯:
var ws = new WebSocket("wss://echo.websocket.org"); // WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例。
ws.onopen = function(evt) {
console.log("Connection open ..."); // 实例对象的onopen属性,用于指定连接成功后的回调函数。
ws.send("Hello WebSockets!");
};
ws.onmessage = function(evt) {
console.log( "Received Message: " + evt.data); // 用于指定收到服务器数据后的回调函数。
ws.close();
};
ws.onclose = function(evt) { // 用于指定连接关闭后的回调函数。
console.log("Connection closed.");
};
webSocket.readyState
readyState属性返回实例对象的当前状态,共有四种。
CONNECTING:值为0,表示正在连接。
OPEN:值为1,表示连接成功,可以通信了。
CLOSING:值为2,表示连接正在关闭。
CLOSED:值为3,表示连接已经关闭,或者打开连接失败。
其实用起来也挺简单的,基本好像是那种直播,聊天上websocket会比较多,
看大家也都是结合node 来开发, 当然需要自己去实践过才知道优缺点呗,
我也在也在尝试webSocket 和 vue 结合起来写一些demo ,加强记忆。
websocket和通信的更多相关文章
- Spring Boot WebFlux-08——WebFlux 中 WebSocket 实现通信
第08课:WebFlux 中 WebSocket 实现通信 前言 WebFlux 该模块中包含了对反应式 HTTP.服务器推送事件和 WebSocket 的客户端和服务器端的支持.这里我们简单实践下 ...
- websocket的通信原理
首先什么是websocket? 1.websocket和http一样是一种通信协议,是HTML5的一种新的协议. 2.既然有了http协议了,为什么还会有websocket呢?是因为是为了弥补http ...
- 测试Websocket建立通信,使用protobuf格式交换数据
接到一个应用测试,应用实现主要使用websocket保持长链接,使用protobuf格式交换数据,用途为发送消息,需要我们测试评估性能,初步评估需要测试长链接数.峰值消息数以及长期运行稳定性 整体需求 ...
- websocket通信 实现java模拟一个client与webclient通信
发文原由: 熟悉socket通信的同学,对于socket模拟server与client,实现相互通信, 或者使用websocket与java模拟的websocket服务器通信(比如一个聊天室),对于这 ...
- SignalR 中使用 MessagePack 序列化提高 WebSocket 通信性能
It's like JSON.but fast and small. MessagePack is an efficient binary serialization format. It lets ...
- Python Web学习笔记之WebSocket 通信过程与实现
一.什么是 WebSocket ? WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输.但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现. 以前客户端想知道服务 ...
- [转] 在vue中使用SockJS实现webSocket通信
最近接到一个业务需求,需要做一个聊天信息的实时展示的界面,这就需要和服务器端建立webSocket连接,从而实现数据的实时获取和视图的实时刷新.在此将我的实现记录下来,希望可以给有同样需求的人一些帮助 ...
- .NET 即时通信,WebSocket
.NET 即时通信,WebSocket 即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s ...
- Python3+WebSockets实现WebSocket通信
一.说明 1.1 背景说明 前段时间同事说云平台通信使用了个websocket的东西,今天抽空来看一下具体是怎么个通信过程. 从形式上看,websocket是一个应用层协议,socket是数据链路层. ...
随机推荐
- git远程分支被误删,本地分支还存在,如何恢复远程分支?
做项目的时候碰到了这样一件事:本地分支存在,远程分支不在了,如图: (git branch -a 是查看本地和远程分支,红色部分是远程分支) (git branch -r 是查看远程分支的) 奇怪的是 ...
- Windows系统Git Bash Sock5代理
git config --global https.proxy http://127.0.0.1:1080 git config --global https.proxy https://127.0. ...
- Oracle 无备份情况下的恢复--临时文件/在线重做日志/ORA-00205
13.5 恢复临时文件 临时文件没有也不应该备份.通过V$TEMPFILE可以找到所有的临时文件. 此类文件的损坏会造成需要使用临时表空间的命令执行失败,不至于造成实例崩溃或session中断.由于临 ...
- java:异常机制(try,catch,finally,throw,throws,自定义异常)
* String类中的格式化字符串的方法: * public static String format(String format, Object... args):使用指定的格式字符串和参数返回一个 ...
- WinForm和WPF中注册热键
由于.Net没有提供专门的类库处理热键,所以需要直接调用windows API来解决. HotKey为.NET调用Windows API的封装代码,主要是RegisterHotKey和Unregist ...
- CTF—攻防练习之ssh私钥泄露
攻防练习1 ssh私钥泄露 靶场镜像:链接: https://pan.baidu.com/s/1xfKILyIzELi_ZgUw4aXT7w 提取码: 59g0 首先安装打开靶场机 没办法登录,也没法 ...
- MVC学习途径
博客园专题:http://kb.cnblogs.com/zt/mvc/ MVC源码:http://www.codeplex.com/site/search?projectSearchText=mvc ...
- 启用yarn的高可用
选择高可用的主机,新的一台: 点运行结束后,会看到实例会多出一个备用的节点:
- neo4j - 查询效率的几种优化思路
最近在公司实习做的就是优化neo4j图形数据库查询效率的事,公司提供的是一个在Linux上搭建且拥有几亿个节点的数据库.开始一段时间主要是熟悉该数据库的一些基本操作,直到上周才正式开始步入了优化数据库 ...
- Python流程控制与while 循环(day01)
一:流程控制 假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断哪条叉路是你真正要走的路,如果我们想让 ...