springwebsocket簡單demo

基於註解的websocket

WebSocket 通信流程 ws:// 開頭 Upgrade:websocket Connection:upgrade 狀態碼:101協議變更 websocket沒有同源限制。

1. 服務終端類:

用java註解來監聽連接端點:@ServerEndpoint、 連接成功@OnOpen、連接關閉@OnClose、收到消息等狀態 @OnMessage

package com.ruoyi.websocket.java;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 監聽websocket地址/myWs
 */
@ServerEndpoint("/myWs")
@Component
@Slf4j
public class WsServerEndponit {
    static Map<String, Session> sessionMap=new ConcurrentHashMap<>();

    //連接建立執行的操作
    @OnOpen
    public  void OnOpen(Session session){
        sessionMap.put(session.getId(),session);
        log.info("websocket is open");

    }
    //收到了客戶端消息執行的操作
    @OnMessage
    public  String OnMessage(String text){
        log.info("websocket is OnMessage");
        log.info("revice a message"+text);
        return "revice a message";

    }
    //連接關閉是執行的操作
    @OnClose
    public  void OnClose(Session session){
        sessionMap.remove(session.getId());
        log.info("websocket is close");

    }
    //每2秒向客戶端發送消息
    @Scheduled(fixedRate = 2000)
    public  void sendMsg() throws IOException {
        for (String key:sessionMap.keySet()){
            sessionMap.get(key).getBasicRemote().sendText("心跳測試");
        }
        log.info("websocket send message");

    }
}

2. 配置類:

把spring中的ServerEndpointExporter對象注入進來


package com.ruoyi.websocket.java;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
public class WebSocketConfig {
    //若依框架引用websocket serverEndpointExporter引入不了包
    //https://blog.csdn.net/weixin_43737919/article/details/125760457
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }
}
html5demo:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>websocketdemo</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
</head>
<body>
	<script type="text/javascript">
		let ws=new WebSocket("ws://localhost:8080/myWs");
		ws.onopen+function(){
			ws.send("hello")
		}
		ws.onmessage=function (message){
			console.log(message.data)
		}
	</script>
    
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章