avatar

一条在知识海洋的咸鱼

这个家伙很懒,啥也没有留下😋

  • 首页
  • Linux
  • OCJP
  • Java核心技术卷
  • J2EE相关标准
  • 深入理解Java虚拟机
  • NIO与SOcket编程技术指南
  • Java多线程编程核心技术
  • Redis开发与运维
  • Spring Cloud Alibaba 微服务原理与实践
  • DevOps
  • Docker
  • MySQL必知必会
  • AI自学路线
  • Spring Boot 编程思想(核心篇)
主页 WebSocket
文章

WebSocket

发表于 2021-12-16 更新于 2026-06- 10
作者 Administrator
10~13 分钟 阅读

WebSocket 是一种应用程序协议,它通过 TCP 协议在两个对等体之间提供全双工通信。

  • 半双工通信
    发送数据的同时也能够接收数据,两者同步进行。但不能双方同时发送或同时接收 例如对讲机
  • 全双工通信
    发送数据的同时也能够接收数据,两者同步进行。 例如手机

在HTTP中使用的传统请求-响应模型中,客户端请求资源,服务器提供响应,具有局限性

  • WebSocket简介
    • WebSocket协议
  • 创建WebSocket
    • 注解声明周期含义

WebSocket简介

  • 服务器发布一个 WebSocket端点,客户端使用端点的 URI 连接到服务器。
  • WebSocket协议在建立连接后是对称的;客户端和服务器可以在连接打开时随时相互发送消息,并且可以随时关闭连接。
  • 客户端通常只连接到一台服务器,服务器接受来自多个客户端的连接。

WebSocket协议

  • WebSocket协议有两部分:握手和数据传输。客户端通过使用其 URI 向 WebSocket 终结点发送请求来启动握手。
  • 握手与现有的基于 HTTP 的基础结构兼容:Web 服务器将其解释为 HTTP 连接升级请求。
  • WebSocket支持传输类型
    文本消息(编码为 UTF-8)和二进制消息
  • WebSocketURI
    ws://host:port/path?query
    未加密的连接,默认为80端口
    wss://host:port/path?query
    加密连接,默认为443端口

创建WebSocket

WebSocket 端点被实例化了多次。换句话说websocket对服务器的压力更大
容器会根据与其部署 URI 的连接创建终结点的实例。每个实例都与一个且只有一个连接相关联。换句话说websockt类不是单例
image.png

  • javax.websocket.server包
    websocket服务端类、接口、注解
  • javax.websocket包
    websocket客户端及及通用类、接口、注解

创建和部署 WebSocket endpoint的过程如下。
1.创建endpoint类。
2.实现endpoint的生命周期方法。
3.将业务逻辑添加到endpoint。
4.在 Web 应用程序内部署endpoint。

@ServerEndpoint("/echo")
public class WebSocketTest {
    public WebSocketTest(){
        System.out.println("WebSocketTest被实例化");
    }
    @OnMessage
    public void onMessage(Session session, String msg) {
        try {
            session.getBasicRemote().sendText(msg);
            System.out.println(msg);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在线测试地址
http://coolaf.com/tool/chattest
image.png
由上图可以看出WebSocket是多例的,可重复创建实例,但是servlet默认单例(可以特别声明创建多例)

注解声明周期含义

  • @OnOpen 连接已打开
public void open(Session session, 
                 EndpointConfig conf) { }
  • OnMessage 收到的消息
public void message(Session session, 
                    String msg) { }
  • @OnError 连接错误
public void error(Session session, 
                  Throwable error) { }
  • OnClose 连接已关闭
@OnClose
public void close(Session session, 
                  CloseReason reason) { }



J2EE相关标准
许可协议: 
分享

相关文章

12月 16, 2021

WebSocket

WebSocket 是一种应用程序协议,它通过 TCP 协议在两个对等体之间提供全双工通信。半双工通信发送数据的同时也能够接收数据,两者同步进行。但不能双方同时发送或同时接收 例如对讲机全双工通信发送数据的同时也能够接收数据,两者同步进行。 例如手机在HTTP中使用的传统请求-响应模型中,客户端请求

12月 15, 2021

Servlet及异步处理

过滤、监听ServletConfig、GenericServlet、ServletContext异步IO[toc]ServletConfig在Web容器启动之后,在web.xml或注解中读取相关配置生成一个ServletConfig对象,实例化Servlet类,并且读取

12月 13, 2021

Servlet技术

Servlet是Java EE的核心。什么是Servlet怎么使用servlet什么是Servlet他就是一个 Java 编程语言中的一个class,用于扩展服务器的功能。servlet 可以响应任何类型的请求,但它们通常用于扩展由 Web 服务器托管的应用程序。对于这样的应用程序,Java Ser

下一篇

Docker部署常用服务及迁移

上一篇

Servlet及异步处理

最近更新

  • 55 异常兜底:工具失败、非法输出、空检索与超时
  • 54 Agent Memory:短期记忆、用户上下文与摘要
  • 53 Human-in-the-loop:让关键动作暂停、确认与恢复
  • 52 工单 Tool:字段校验、创建结果与失败补偿
  • 51 订单 Tool:Mock、鉴权、状态解析与脱敏

热门标签

java基础 微服务 maven Spring Tomcat DDD Linux Linux基础 SQL基础 数据结构算法

目录

©2026 一条在知识海洋的咸鱼. 保留部分权利。

使用 Halo 主题 Chirpy