1. websocket在线测试,WebSocket是什么原理?
首先我们看一下websocket的出现背景,我们知道http系列协议是建立在tcp上的,理论上,他是可以可以双向通信的。但是http1.1之前,服务器没有实现推送的功能。每次都是客户端请求,服务器响应。下面看一下http协议关于请求处理的发展。
http1.0的时候,一个http请求的生命周期是客户端发起请求,服务器响应,断开连接。但是我们知道tcp协议的缺点就是,三次握手需要时间,再加上慢开始等特性,每一个http请求都这样的话,效率就很低。http1.1的时候,默认开启了长连接(客户端请求中设置了keep-alive头),服务器处理一个请求后,不会立刻关闭连接,而是会等待一定的时间。如果没有请求才关闭连接。这样浏览器不仅可以在一个tcp连接中,不断地发送请求(服务器也会限制一个连接上可以处理的请求阈值),甚至可以一次发很多个请求。这就是http1.1的管道化(pipeline)技术。但是他也有个问题,因为对于基于http协议的客户端来说,虽然他可以发很多请求出去,但是当一个请求对于的回包回来时,他却无法分辨是属于哪个请求的。所以回包只能按请求顺序返回,这就引来了另一个问题-线头阻塞(Head-of-Link Blocking)。并且http1.1虽然支持长连接,但是他不支持服务端推送(push)的能力。如果服务器有数据要给客户端,也只能等着客户端来取(pull)。来到了http2.0,不仅实现了服务器推送,还使用了帧(iframe),流(stream)等技术解决了线头阻塞的问题,http2.0在一个tcp连接中,可以同时发送多个http请求,每个请求是一个流,一个流可以分成很多帧,有了标记号,服务器可以随便发送回包,客户端收到后,根据标记,重新组装就可以。以上是http协议的关于请求的一些发展,而websocket就服务端推送提供了另外一种解决方案。他本质上是在tcp协议上封装的另一种应用层协议(websocket协议)。因为他是基于tcp的,所以服务端推送自然不是什么难题。但是在实现上,他并不是直接连接一个tcp连接,然后在上面传输基于websocket协议的数据包。他涉及到一个协议升级(交换)的过程。我们看看这个过程。1 客户端发送协议升级的请求。在http请求加上下面的http头2 服务器如果支持websocket协议的话,会返回101状态码表示同意协议升级,并且支持各种配置(如果服务器不支持某些功能或版本,或告诉客户端,客户端可以再次发送协议升级的请求)。服务会返回形如下面的http头(可以参考websocket协议)。3 这样就完成了协议的升级,后续的数据通信,就是基于tcp连接之上,使用websocket协议封装的数据包。下面我们通过wireshark来了解这个过程。首先我们启动一个服务器(ip:192.168.8.226)。我们可以直接在浏览器控制台进行测试这时候,我们看看wireshark的包。首先看前面三条记录,这是tcp三次握手的数据包。这个我们都了解了,就不展示。接着看第四条记录。展开后如下。我们看到建立tcp连接后,浏览器发了一个http请求,并带上了几个websocket的数据包。接着看下面的一条。服务返回了同意升级协议或者说交换协议。从服务器代码中我们看到,在建立连接的时候我们给浏览器推送了一个get it的字符串。继续看上面的记录。这就是服务器给浏览器推送的基于websocket协议的数据包。具体每个字段什么意思,参考websocket协议就可以。继续往下看一条记录是针对服务器推送的数据包的一个tcp的ack。最后我们可以顺便看看最后三条写着keep-alive的记录。这就是之前文章里讲到的tcp层的keep-alive。因为我们一直没有数据传输,所以tcp层会间歇性地发送探测包。我们可以看看探测包的结构。有一个字节的探测数据。如果这时候我们发送一个数据包给服务器,又是怎样的呢。白色背景的三条数据,分别是浏览器发送给服务器的数据,服务器推送回来的数据。tcp的ack。我们发现,服务器给浏览器推送的时候,浏览器会发送ack,但是浏览器给服务器发送的时候,服务器貌似没有返回ack。下面我们看看为什么。首先我们看浏览器发出的包。再看看服务器给浏览器推送的数据包。我们发现服务器(tcp)推送消息的时候把ack也带上了。而不是发送两个tcp包。这就是tcp的机制。tcp不会对每个包都发ack,他会累积确认(发ack),以减少网络的包,但是他也需要保证尽快地回复ack,否则就会导致客户端触发超时重传。tcp什么时候发送确认呢?比如需要发送数据的时候,或者超过一定时间没有收到数据包,或者累积的确认数量达到阈值等。既然研究了tcp,我们不妨多研究点,我们看一下,如果这时候关闭服务器会怎样。服务器会发送一个重置包给浏览器,告诉他需要断开连接。继续,如果是浏览器自己调用close去关闭连接会怎样。我们看到websocket首先会发送一个FIN包给服务器,然后服务器也会返回一个FIN包,然后才开始真正的四次挥手过程。并且四次挥手的第一个fin包是服务器发的。我们再来看看安全版本的websocket。我们启动一个https服务器。然后在浏览器控制台执行。然后来看看wireshark。首先建立tcp连接,然后建立tls连接。后续的数据通信就可以基于加密来进行了。不再重复。后续分析tls协议的时候再分析。经过一系列的分析,我们对websocket协议应该有了更多的了解,最后再说一个关于websocket的点。我们发现如果在websocket连接上,一直不通信的话,websocket连接所维持的时间是依赖tcp实现的。因为我们发现tcp层会一直发送探测包。达到阈值之后,连接就会被断开。所以我们想维持websocket连接的话,需要自己去发送心跳包,比如ping,pong。总结:本文分析了websocket的基本原理,但不涉及协议的内容,如需了解协议的内容,可以参考rfc文档。2. 101代码与102代码区别?
101代码和102代码分别是电话报警和短信报警的警情代码。
101代码是指电话报警,是市民向公安机关报警或求助的电话号码,是中国大陆公安机关的统一紧急报警电话号码。市民通过撥打101电话,可向公安机关报告情况、求助呼叫,公安机关接到报警后将根据不同需求向现场派警,提供相关坐标,以便及时处理紧急情况。
102代码是指短信报警,市民向公安机关报警或求助时,也可以通过发送包含相关信息的短信(例如“劫匪劫持了我们,请求救援!”),向公安机关发出求助信号,以便公安机关及时进行处理。在使用短信报警时,需要首先在相关机构进行注册,获取使用权限,并提供相关的身份信息。
总的来说,两种报警方式都旨在为民众报警提供方便和保障,市民可以根据自己的需求和实际情况选择合适的报警方式。
3. boot使用shiro还是secuitry好?
Shiro和Spring Security都是安全框架,简单说是对访问权限进行控制,他们都提供了认证、授权、加密、会话管理;这里要提一句,通常这种安全框架不会去帮助我们维护用户/权限;这些需要我们自己去实现,然后通过相应的接口注入给安全框架。
那么Spring Boot项目的话,是使用Shiro还是Spring Security呢?还是先看看两者有什么区别和各自的优缺点:
Shiro的配置和使用比较简单,Spring Security上手复杂些;
Shiro依赖性低,理论上不需要任何框架和容器,可以独立运行(但是最常用的环境还是JavaEE);Spring Security依赖Spring容器;
Shiro支持Web项目和非Web项目;在集群环境中,Shiro可以独立于容器;
Spring Security基于Spring开发,项目若使用Spring(包括Spring Boot)作为基础,配合Spring Security做权限更加方便;Shiro需要和Spring进行整合(不过这个复杂程度可以忽略);
Spring Security对Oauth、OpenID也有支持,Shiro则需要自己手动实现。
总结一下,Spring Boot使用Shiro还是Spring Security,我更倾向于Shiro。
一方面虽然Shiro需要和Spring Boot做整合,但是这个过程不复杂;
另外一方面Oauth、OpenID站点间统一登录功能,会有更好的实现方案,很少在这个层级实现,所以Spring Security的这两个功能可以不考虑。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。4. sw和swr区别?
SW和SWR是无线通信中常用的两个参数,它们分别代表着不同的含义:
SW(Standing Wave):SW是驻波比(Standing Wave Ratio)的缩写,用于描述无线电频率传输线上的驻波情况。驻波是指在传输线上由于信号的反射而形成的波动。SW是反映传输线上驻波程度的一个无单位的比值。SW的取值范围通常为1到无穷大,其中1表示完全匹配,即无驻波,而无穷大表示完全不匹配,即最大驻波。
SWR(Standing Wave Ratio):SWR也是驻波比(Standing Wave Ratio)的缩写,它是SW的一种常用表达方式。SWR是指传输线上最大电压和最小电压之比的绝对值。SWR是一个无单位的比值,通常用数字表示。SWR的取值范围从1到无穷大,其中1表示完全匹配,即无驻波,而无穷大表示完全不匹配,即最大驻波。
总结来说,SW和SWR都是用来描述无线通信中传输线上驻波情况的参数,它们都反映了信号的匹配程度。SW是一个无单位的比值,而SWR是一个无单位的绝对值。在实际应用中,SWR更常用,因为它更直观地表示了驻波的程度。
5. pychrome使用教程?
pychrome是一个Python库,用于与谷歌Chrome浏览器通信。它可以通过远程调试协议与Chrome浏览器交互,实现自动化浏览器操作和数据爬取。
以下是pychrome的使用教程:
1. 安装pychrome库:
```
pip install pychrome
```
2. 打开Chrome的调试端口:
通过在Chrome的启动参数中添加 `--remote-debugging-port` 参数来打开调试端口。例如:
```
chrome.exe --remote-debugging-port=9222
```
3. 创建一个pychrome实例:
```python
import pychrome
# 创建一个浏览器实例
browser = pychrome.Browser(url="http://127.0.0.1:9222")
```
4. 创建一个浏览器标签:
```python
# 创建一个浏览器标签
tab = browser.new_tab()
```
5. 注册回调函数:
```python
# 注册回调函数,处理事件
def callback(message):
print(message)
# 设置回调函数
tab.Network.requestWillBeSent = callback
```
6. 开始网络抓包:
```python
# 启用网络抓包
tab.Network.enable()
```
7. 加载一个网页:
```python
# 加载一个网页
tab.Page.navigate(url="https://www.example.com")
```
8. 等待网页加载完成:
```python
# 等待网页加载完成
tab.wait(5) # 等待5秒
```
9. 关闭浏览器标签和浏览器实例:
```python
# 关闭标签和浏览器
browser.close_tab(tab)
browser.close_browser()
```
这是一个基本的pychrome使用教程,你可以根据具体需求,按照pychrome的文档进一步学习和使用。
6. spring的核心技术有哪些?
一、Spring不近是一个框架,已然成为一种生态。
二、简化开发
2.1基于POJO的轻量级和最小侵入性编程
2.2通过依赖注入和面向接口松耦合
2.3基于切面和声明式编程
2.4通过切面和模板减少样板式代码
三、Spring系统架构图
四、spring之核心模块
模块名称 主要功能
spring-core 依赖注入IOC与DI的最基本实现
spring-beans Bean工厂与Bean的装配
spring-context 定义基础的spring的Context上下文及IOC容器
spring-context-support 对springIOC容器的扩展,以及IOC子容器
spring-context-indexer Spring类管理组件和Classpath扫描
spring-expression Spring表达式语言
五、spring之切面编程模块
模块名称 主要功能
spring-aop 面向切面编程的应用模块
spring-aspects 集成AspectJ,AOP应用框架
spring-instrument 动态Class Loading 模块
六、spring之数据访问与集成模块
模块名称 主要功能
spring-jdbc spring提供JDBC抽象框架的主要实现模块,简化Spring jdbc操作
spring-tx Spring jdbc事物控制实现模块
spring-orm 主要集成Hibernate,Jpa,java Date Objects
spring-jms java Messaging service能够发送和接收信息
spring-oxm java对像映射XML数据,或者将XML数据映射成Java对象
七、spring之web模块
模块名称 主要功能
spring-web 提供web支持,主要建立与核心容器之上,通过Sercvlet或者 Listeners初始化IOC容器
spring-webmvc 实现springMVC(model-view-Controller)的web应用
spring-websocket 主要是与web前端的全双工通讯的协议
spring-webflux 新的非堵塞函数式Reactive Web 框架,可以用来建立异步的,非 阻塞,事件驱动服务
八、spring之通信报
模块名称 主要功能
spring-messaging spring框架集成一些基础的报文传送应用
九、spring之集成测试
模块名称 主要功能
spring-test 提供测试支持
十、spring各模块之间的依赖关系
我是阳光随馨馨,如果你看完了,就点个赞,加个关注,转发一下,谢谢!7. 学习web前端开发?
黑马程序员web前端中级程序员学习路线图,含配套视频,前端工具,源码等。
黑马程序员学习路线图及能掌握的能力(总,以下会分阶段,加上配套学习视频,小伙伴可继续往下看!)
第一阶段:HTML5+css
配套学习视频:
前端小白零基础入门HTML5+CSS3
第二阶段:移动web网页开发
配套学习视频:
2018移动web进阶教程
第三阶段:JavaScript网页编程
配套学习视频:
前端与移动开发基础入门到精通
javaScript零基础通关必备教程
第四阶段:Node.js与Ajax
配套学习视频:
Nodejs教程精讲
ajax从入门到精通
第五阶段:vue.js项目实战
配套学习视频:
4小时+5个拣选案例让你快速入门Vue.js
2018年Vue.js深入浅出教程
第六阶段:微信小程序
配套学习视频:
一天教你打造企业级微信小程序
微信小程序-个人语音接口功能
分分钟快速入门小程序开发
零基础玩转微信小程序
2小时轻松实现人脸识别的小程序
第七阶段:React.js项目实战
配套学习视频:
Reactjs入门教程
ReactJs精品教程
第八阶段:框架阶段与原理
第九阶段:移动APP开发
第十阶段:node.js进阶
第十一阶段:可视化游戏
第十二段阶段:架构与运维
还有前端免费工具下载
另外,关注加转发,然后私聊我发送:前端,就能获得上面这些资源咯。