准备材料

  1. 一个可以测试websocket的网站:http://coolaf.com/tool/chattest
  2. consul(服务注册中心)

1. 搭建环境

新建spring项目的操作略过,引入依赖
pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

配置文件

#微服务建议一定要写服务端口号和微服务名称
server:#consul服务端口号port: 8006#服务别名----注册zookeeper到注册中心的名称
spring:application:#微服务名称name: cloud-payment-service#数据库配置datasource:type: com.alibaba.druid.pool.DruidDataSource#mysql5.x的没有cjdriver-class-name: com.mysql.cj.jdbc.Driver#记得先创建数据库url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=trueusername: xxxxpassword: xxxxx#R7000终端密码#consul注册中心地址cloud:consul:host: localhostport: 8500discovery:#hostname:127.0.0.1service-name: ${spring.application.name}prefer-ip-address: true

具体的实现代码:
首先是注入配置类

@Configuration
public class WebSocketConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter(){return new ServerEndpointExporter();}
}

实现类:


@Slf4j
//将目前的类定义成一个websocket服务器端,注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
@ServerEndpoint("/ws/{token}")
@Component
public class MyWebSocket {// 定义全局变量// 当前在线连接数private static final AtomicInteger ONLINE_NUM = new AtomicInteger(0);// 存放客户端对应的webSocket对象private static ConcurrentHashMap<String, Session> SESSION_MAP = new ConcurrentHashMap<>();//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识private static ConcurrentHashMap<String, Socket> webSocketSet = new ConcurrentHashMap<String, Socket>();/*** 连接建立* 从请求的URL:ws://localhost:8006/ws/{token}参数里面获取标识token*/@OnOpenpublic void onOpen(@PathParam("token") String token, Session session){System.out.println("长连接已建立,用户:" + token);// 存储连接session,在需要用的地方直接使用SESSION_MAP.put(token,session);}/*** 收消息*/@OnMessagepublic void onMessage(Session session, String msg){String[] split = session.getRequestURI().getPath().split("/");String userName = split[2];String outMessage = "客户端 " + session.getId() + " 说:" + msg;System.out.println(outMessage);String returnMessage = "你刚才说:" + msg;SESSION_MAP.keySet().forEach(item->{try {SESSION_MAP.get(item).getBasicRemote().sendText("用户"+ userName + "发送:" + msg);} catch (IOException e) {throw new RuntimeException(e);}});// session.getBasicRemote().sendText(returnMessage);}/*** 连接断开* @param token* @param session*/@OnClosepublic void onClose(@PathParam("token") String token, Session session){System.out.println("长连接已断开,用户:" + token);SESSION_MAP.remove(token);}/*** 长连接出现异常*/@OnErrorpublic void onError(Throwable throwable){System.out.println("长连接出现异常:" + throwable.getMessage());}/*** 后端发送消息*/public void sendMessage(String sessionId, String message) {Session session = SESSION_MAP.get(sessionId);try {session.getBasicRemote().sendText(message);} catch (IOException e) {e.printStackTrace();}}
}

2.演示

首先启动注册中心,命令:

./consul agent -dev

注意上面终端命令需要在consul所在目录下执行

服务注册中心正常启动:

启动后端服务:

打开websocket测试工具网址,输入
ws://ip地址:8006/ws/用户Id

点击【连接】,显示连接成功后,即可发送消息

webSocket搭建简易聊天室(后端实现)相关推荐

  1. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下: http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.j ...

  2. 原创 回归前端学习第21天-实现俄罗斯方块小游戏3(深入了解Websocket~优化简易聊天室)

    对昨天的简易聊天室进行优化 增加一个mes对象,将传送的数据放在对象里 增加一个mes对象,将传送的数据放在对象里 wsServer.js中替换代码 broadcast(conn.nickname + ...

  3. 一步一步教您用websocket+nodeJS搭建简易聊天室(4)

    2019独角兽企业重金招聘Python工程师标准>>> 上节中带大家基于websoket与nodejs搭建了一个基本的聊天室雏形,实现了基本的聊天消息首发,用户状态显示,异常处理.但 ...

  4. 使用Swoole服务搭建简易聊天室

    前言: 之前写过一篇关于swoole的安装搭建的文章.也测试了搭建TCP协议的服务.但是今天我要介绍的是WebSocket协议,WebSoket协议的出现,解决了http协议的很大的一个缺陷.那就是服 ...

  5. nodejs websocket 实现简易聊天室功能

    文章目录 1. 服务端 app.js 代码 2. 客户端 app.html 代码 3. 样式代码 app.css 4. nodemon 辅助开发 首先说明,以下代码都是基于 Nodejs+webSoc ...

  6. Vue3 -- 基于Websocket实现简易聊天室

    文章目录 标题 代码地址 表情包资源 chat.data.ts index.vue 标题 接上一篇博文 这里使用 Vue3 + Typescript + Websocket 实现在线聊天功能的前端部分 ...

  7. websocket实现简易聊天室

    websocket支持全双工通信,也就是客户端和服务端双向通信.以前都是通过http轮询的方式实现实时的,这非常耗性能.Websocket不仅能节省资源和带宽,还能实现长链接的作用 前端通过创建Web ...

  8. webSocket——Vue2简易聊天室

    WebSocket原生实现 WebSocket-Vue2 WebSocket-Vue3 Vue2版本实现 前端实现 目录结构 login.vue 登录 <template><div& ...

  9. WebSocket——vue3简易聊天室

    WebSocket原生实现 WebSocket-Vue2 WebSocket-Vue3 前端实现 目录结构 登录(LoginView.vue) <template><div clas ...

最新文章

  1. 20145326蔡馨熤《信息安全系统设计基础》第1周学习总结
  2. hdu 4763 Theme Section(next数组找串中三段相等)
  3. [Python语音识别项目笔记] 2矩阵标准化和去标准化
  4. 包邮送书 50 本,你还有什么理由不上进?
  5. 网站计数器 web映射
  6. struts中多个模块时,使用多个struts-config.xml文件之间时如何切换的!
  7. ospf避免环路_【HCIERamp;S面试】之OSPF四种特殊区域
  8. html设置长宽高代码_(HTML)图像的宽高和边框设置!
  9. 影响宝宝脾胃健康的3个“真凶”,难怪孩子脾胃总是调不好!
  10. 论文阅读 视频生成(vid2vid) || Few-shot Video-to-Video Synthesis
  11. python 每天定时运行程序(傻瓜式倒计时)
  12. MIUI v5内测版泄漏!
  13. 智能耳机测试软件,智能可穿戴设备有哪些?解析可穿戴设备的作用和测试
  14. JAVAFX如何在文本框内插入图片
  15. 股票查询接口常见的证券编码规则是怎样的?
  16. 在线云html排版,云标签,关键字图排版 html5 canvas版
  17. Matplotlib.pyplot 常用方法
  18. ZLib的数据压缩和解压缩
  19. [ MessAuto ]: 短信验证码自动填充,理论支持所有浏览器或 APP, Only For Mac
  20. 淘淘商城第32讲——CMS内容管理系统的搭建

热门文章

  1. 汇编语言 --- 32位x86处理器架构
  2. [算法系列之十一]荷兰国旗问题
  3. 可以在虚拟机里运行Java吗,在Java虚拟机中可以运行Java的_____文件。
  4. position定位及小案例
  5. ctf 抓捕赵德汉_陕西省网络空间安全技术大赛Mobile(四)--人民的名义抓捕赵德汉1...
  6. 国际物流跨境电商转运系统是什么
  7. 送人玫瑰,手留余香——2015年技术分享交流小结
  8. 牛客网 机器学习题目
  9. 第五天,文件上传操作FastDFS
  10. ValueError: x and y arrays must be equal in length along interpolation axis.