赞
踩
@ServerEndpoint
注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
首先 maven中加入
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-websocket</artifactId>
- </dependency>
WebSocket java代码
- @Component
- @ServerEndpoint(value = "/websocket/{username}")
- public class WebSocket {
- private static final Logger log = LoggerFactory.getLogger(WebSocket.class);
-
- public static int onlineCount = 0;
- public static Map<String, WebSocket> clients = new HashMap<String, WebSocket>();
- public Session session;
- public String username;
- public String getUsername() {
- return username;
- }
-
- @OnOpen
- public void onOpen(@PathParam("username") String username, Session session) throws IOException {
- this.username = username;
- this.session = session;
- addOnlineCount();
- clients.put(session.getId(), this);
- log.warn("已连接:"+username);
- }
-
- @OnClose
- public void onClose() throws IOException {
- log.warn("断开"+username);
- clients.remove(session.getId());
- subOnlineCount();
- }
-
- //收到客户端消息后调用的方法
- @OnMessage
- public void onMessage(String message) throws IOException {
- if(message.equals("ping")) {
- this.session.getAsyncRemote().sendText("pang");
- }else if("close".equals(message)) {
- onClose();
- this.session.close();
- }else {
- log.warn(this.username+"收到 "+message);
- }
- }
- @OnError
- public void onError(Session session, Throwable error) {
- error.printStackTrace();
- }
-
- public static void sendMessageTo(JSONObject json) {
- log.warn("sendMsg:"+json);
- for (WebSocket item : clients.values()) {
- item.session.getAsyncRemote().sendText(json.toJSONString());
- }
- }
-
- public static void clearMessageFromOpen(String message) {
- try {
- JSONObject json = JSONObject.parseObject(message);
- if(json.get("uuid") != null) {
- }
- } catch (Exception e) {
- }
- }
-
-
- public static synchronized int getOnlineCount() {
- return onlineCount;
- }
-
- public static synchronized void addOnlineCount() {
- WebSocket.onlineCount++;
- }
-
- public static synchronized void subOnlineCount() {
- WebSocket.onlineCount--;
- }
-
- public static synchronized Map<String, WebSocket> getClients() {
- return clients;
- }
-
- }
在RunApplication中加入
- /**
- * 会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
- * 要注意,如果使用独立的servlet容器,
- * 而不是直接使用springboot的内置容器,
- * 就不要注入ServerEndpointExporter,因为它将由容器自己提供和管理。
- */
- @Bean
- public ServerEndpointExporter serverEndpointExporter() {
- return new ServerEndpointExporter();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。