1. Websocket原理

  • Websocket协议本质上是一个基于TCP的独立协议,能够在浏览器和服务器之间建立双向连接,以基于消息的机制,赋予浏览器和服务器间实时通信能力。
  • WebSocket资源URI采用了自定义模式:ws表示纯文本通信,其连接地址写法为“ws://**”,占用与http相同的80端口;wss表示使用加密信道通信(TCP+TLS),基于SSL的安全传输,占用与TLS相同的443端口。

2. Websocket与HTTP比较

WebSocket 和 HTTP 都是基于 TCP 协议;
TCP是传输层协议,WebSocket 和 HTTP 是应用层协议

HTTP是用于文档传输、简单同步请求的响应式协议,本质上是无状态的应用层协议,半双工的连接特性。Websocket与 HTTP 之间的唯一关系就是它的握手请求可以作为一个升级请求(Upgrade request)经由 HTTP 服务器解释(也就是可以使用Nginx反向代理一个WebSocket)。

联系:

客户端建立WebSocket连接时发送一个header,标记了Upgrade的HTTP请求,表示请求协议升级;
服务器直接在现有的HTTP服务器软件和端口上实现WebSocket,重用现有代码(比如解析和认证这个HTTP请求),然后再回一个状态码为101(协议转换)的HTTP响应完成握手,之后发送数据就跟HTTP没关系了。

区别:

  • 持久性:

HTTP协议:HTTP是非持久的协议(长连接、循环连接除外)
WebSocket协议:Websocket是持久化的协议

  • 生命周期:

HTTP的生命周期通过Request来界定,也就是一个Request 一个Response
HTTP1.0中,这次HTTP请求就结束了;
HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,并接收多个Respouse;
在HTTP中永远都是一个Request只有一个Respouse,而且这个Respouse是被动的,不能主动发起。

3. SpringWeb项目搭建

3.1.1 pom.xml

该项目基于maven搭建,使用SpringBoot2.0版本,引入Spring Websocket所需的jar包,以及对传输的消息体进行JSON序列化所需的jar包。

<dependencies>
        <!-- Compile -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <!-- Test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>
pom.xml

相关文章:

  • 2021-04-20
  • 2022-12-23
  • 2021-12-04
  • 2021-11-27
  • 2022-12-23
  • 2021-08-03
猜你喜欢
  • 2021-10-12
  • 2021-12-22
  • 2022-12-23
  • 2021-06-08
  • 2021-07-16
  • 2022-12-23
  • 2021-12-07
相关资源
相似解决方案