使用 tomcat8 开发 WebSocket 服务端非常简单,大致有如下两种方式。
- 使用注解方式开发,被 @ServerEndpoint 修饰的 Java 类即可作为 WebSocket 服务端
- 继承 Endpoint 基类实现 WebSocket 服务端
开发被 @ServerEndpoint 修饰的类之后,该类中还可以定义如下方法。
- @OnOpen 修饰的方法:当客户端与该 WebSocket 服务端建立连接时激发该方法
- @OnClose 修饰的方法:当客户端与该 WebSocket 服务端断开连接时激发该方法
- @OnMessage 修饰的方法:当 WebSocket 服务端收到客户端消息时激发该方法
- @OnError 修饰的方法:当客户端与该 WebSocket 服务端连接出现错误时激发该方法。
下面将基于 WebSocket 开发一个多人实时聊天的程序,在这个程序中,每个客户所用的浏览器都与服务器建立一个 WebSocket,从而保持实时连接,这样客户端的浏览器可以随时把数据发送到服务器端;当服务器收到任何一个浏览器发送来的消息之后,将该消息依次向每个客户端浏览器发送一遍。
按如下步骤开发 WebSocket 服务端程序即可
- 定义 @OnOpen 修饰的方法,每当客户端连接进来时激发该方法,程序使用集合保存所有连接进来的客户端。
- 定义 @OnMessage 修饰的方法,每当该服务端收到客户端消息时激发该方法,服务端收到消息之后遍历保存客户端的集合,并将消息逐个发给所有客户端。
- 定义 @OnClose 修饰的方法,每当客户端断开与该服务端连接时激发该方法,程序将该客户端从集合中删除。
1、搭建web系统
首先搭建一个简单可访问的web系统,这里提供一个我自己搭建的SSM框架供使用。
使用Tomcat整合websocket,注入导入javaee-api-7.0.jar
1 | <dependency> |
2、创建Websocket服务端
ChatEndpoint.java
1 | package com.websocket; |
需要说明的是,该 CharEndpoint 类并不是真正的 WebSocket 服务端,它只实现了 WebSocket 服务端的核心功能,Tomcat 会调用它的方法作为 WebSocket 服务端。因此,Tomcat 会为每个 WebSocket 客户端创建一个 ChatEndpoint 对象,也就是说,有一个 WebSocket 服务端,程序就有一个 ChatEndpoint 对象。所以上面程序中的 clientSet 集合保存了多个 ChatEndpoint 对象,其中每个 ChatEndpoint 对象对应一个 WebSocket 客户端。
3、创建JS客户端
chat.jsp
1 | <%-- |