前言:

在上一篇文章中讲到了WebSocket的原理,这节中我们先简单的编码分析下,这样有助于在之后的实战编码。

说明:

(1)编码中使用的Spring Boot版本是:1.5.8

(2) 使用WebSocket有两种方式: 第一种方式使用socketJS, 第二种方式是使用H5的标准。实例中使用的是第二种方式

(3)最后提供源代码;

编码分析:

在例子中,我们需要编写两端的代码:服务端和客户端(当然代码都在一个工程里)。

(1)Client:客户端说明

客户端的代码主要是使用H5的WebSocket进行实现,在前端网页中使用WebSocket进行连接服务端,然后建立Socket连接进行通讯。

(2)Server:服务端说明

服务端主要是建立多个客户端的关系,进行消息的中转等。客户端成功连接到服务端之后,就可以通过建立的通道进行发送消息到服务端,服务端接收到消息之后在群发给所有的客户端。

(3)客户端和服务端怎么连接?

客户端通过JS中的WebSocket对象进行连接到服务端:

服务端映射出在上面使用的/websocket 端点呢,使用注解@ServerEndpoint即可:

当客服端有连接请求了,服务端怎么接收请求,使用注解@OnOpen即可:

(4)客户端和服务端怎么发送消息?

客户端可以使用webSocket提供的send()方法,如下代码:

服务端怎么发送消息呢?主要是使用在成功建立连接的时候,创建的Session对象进行发送,如下代码:

(5)客户端和服务端怎么接收消息?

客户端接收消息消息使用的是websocket的onmessage回调方法,如下代码:

服务端怎么接收到消息,使用注解@OnMessage,如下代码:

(6)客户端和服务端关闭连接处理?

客户端使用websocket.close()进行关闭连接;

服务端使用@OnClose注解监听客户端的关闭动作。

(7)客户端和服务端异常处理?

客户端当有异常信息的时候会回调方法:websocket.onerror;

服务端使用@OnError注解监听异常信息。

(8)群聊原理(群发消息)

服务端在和客户端建立连接的时候,会创建一个webSocket对象,我们会将每个连接创建的对象进行报错到一个列表中,比如:CopyOnWriteArraySet(这是线程安全的);在要进行群发的时候,编写我们的列表对象进行群发消息。

(9)单聊原理(一对一消息)

单聊的时候,就无需遍历列表,而是需要知道发送者和接受者各自的Session对象,这个Session对象怎么获取呢?Session可以获取到sessionId,发送者在发送消息的时候,携带接收消息的sessionId,那么问题就演变成了:发送者怎么知道接受者的sessionId,那就是加入一个在线用户列表即可,在线用户列表中有用户的基本信息,包括sessionId。

明白了这些,在接下里的编码中就会轻松很多。

转载自阿里大牛悟纤的公众号。

springboot socket服务端_从零开始学SpringBoot之Spring Boot WebSocket:编码分析相关推荐

  1. SpringBoot+SOCKET服务端客户端

    springBoot启动socket服务端 socket服务端简单实现实例 springBoot启动socket服务端 SOCKET服务端启动 SOCKET客户端连接测试 模拟业务处理线程类 模拟监测 ...

  2. springboot socket服务端_SpringBoot2.x系列教程81--SpringBoot中整合WebSockets

    SpringBoot2.x系列教程81--SpringBoot中整合WebSockets 作者:一一哥 一. WebSockets简介 1. 什么是WebSockets WebSocket是HTML5 ...

  3. springboot内存占用大_小宇宙爆发!Spring Boot 节省95%内存占用

    GraalVM[1] 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务.最近比较火的 Java 框架 Quarkus[2] 默认支持 GraalVM 下图为 Quarkus ...

  4. springboot自动配置原理_今日份学习之Spring Boot自动配置实现原理

    通过前面章节的学习,我们掌握了使用Spring Boot框架进行实际应用开发的方法.在使用Spring Boot 的过程中,我们时常会为一些看似简单,但实际上蕴藏了强大功能的实现而惊呼,下面就让我们来 ...

  5. 从零开始学java 框架_从零开始学 Java - 搭建 Spring MVC 框架

    如果创建一个 Spring 项目 Spring MVC 框架在 Java 的 Web 项目中应该是无人不知的吧,你不会搭建一个 Spring 框架?作为身为一个刚刚学习Java的我都会,如果你不会的话 ...

  6. Springboot整合socket服务端

    使用springboot框架实现socket通信的服务端,接收客户端发来的消息. 随项目启动而启动. package com.socket;import java.io.IOException; im ...

  7. springboot+netty 服务端

    搭建服务端 启动类 在springboot中利用netty替换tomcat,关闭tomcat与banner.添加扫描注解 import org.springframework.boot.Banner; ...

  8. springboot 实现服务端推送消息

    文章目录 前言 一.关于SSE 1. 概念介绍 2. 特点分析 3. 应用场景 二.SpringBoot实现 三.前端vue调用 四.一些问题 前言 服务端推送消息我们采用SSE方式进行推送. 一.关 ...

  9. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

最新文章

  1. java创建临时文件夹_如何在Java中创建一个临时目录/文件夹?
  2. 什么是GDT,LDT,GDTR及LDTR?
  3. [攻防世界 pwn]——Mary_Morton
  4. TYVJ 1557 MST+LCA
  5. 破解SQLSERVER存储过程的加密
  6. 最优化学习笔记(十九)——拟牛顿法(5)BFGS算法
  7. python中outside loop_Python入门指引
  8. git pull 分支问题
  9. Spring 框架 执行SQL getJdbcTemplate().query update 用法
  10. InstallShield 2011新功能试用(7)- 新增加的InstallShield Prerequisites
  11. Android串口示波器,解读一个超赞的开源串口虚拟示波器项目
  12. 腾讯产品笔试策划+经验​
  13. 手把手教你如何建立U盘免疫文件夹
  14. Nginx负载均衡状态值max_fails和fail_timeout
  15. 大专适合学习php么_学习php有没有学历要求
  16. key组合按键,长短按键,连续按键 识别方案
  17. HIT-SCIR/Elmoformanylanguages安装记录
  18. 案例:5秒后关闭广告 定时器
  19. MPU9250使用笔记
  20. 森林救火与计算机相关,无人机森林防火解决方案包含了哪些技术?

热门文章

  1. Atlas元数据存储模型分析
  2. MemSQL可以为时间序列应用做些什么
  3. 腾讯云大数据产品中心总经理刘煜宏:企业全域数据体系建设(附完整PPT)
  4. 现代c++之列表初始化/统一初始化
  5. Android MVP
  6. hive启动mapreduce任务后,被killed
  7. Hadoop 06_MapReduce2.0(YARN)
  8. leetcode 658. Find K Closest Elements | 658. 找到 K 个最接近的元素(二分查找+双指针)
  9. leetcode 191. 位1的个数(移位操作)
  10. CPU缓存一致性协议MESI - 笔记