如何使用websocket實現前后端通信


websocket通信是很好玩的,也很有用的的通信方式,使用方式如下:

 

第一步由於springboot很好地集成了websocket,所以先在在pom.xml文件中引入依賴

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

第二步在前端界面使用websocket,也就是HTML文件中編寫

<script>
    var websocket = null;
    if('WebSocket' in window) {
        websocket = new WebSocket('ws://yesell.natapp1.cc/sell/webSocket');
    }else {
        alert('該瀏覽器不支持websocket!');
    }

    websocket.onopen = function (event) {
        console.log('建立連接');
    }

    websocket.onclose = function (event) {
        console.log('連接關閉');
    }

    websocket.onmessage = function (event) {
        console.log('收到消息:' + event.data)
        //所要執行的操作
    }

    websocket.onerror = function () {
        alert('websocket通信發生錯誤!');
    }

    window.onbeforeunload = function () {
        websocket.close();
    }

</script>

第三步,一般我們是在controller層實現交互的,然而websocket的交互是在service層,

其中:

@ServerEndpoint("/webSocket")是定義了交互的地址
@Slf4j是日志,有興趣了解,請看這篇文章https://www.cnblogs.com/yemengshen/p/11478293.html
@OnOpen、@OnClose、@OnMessage這三個方法與前端的三個同名方法相互交互,在需要使用的位置調用方法如下,
到這里基本寫完了。
@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket {
    private Session session;
    private static CopyOnWriteArraySet<WebSocket> webSocketSet=new CopyOnWriteArraySet<>();
    @OnOpen
    public void onOpen(Session session){
        this.session=session;
        webSocketSet.add(this);
        log.info("【websocket消息】有新的連接,總數:{}",webSocketSet.size());
    }
    @OnClose
    public void onClose(){
        webSocketSet.remove(this);
        log.info("【websocket消息】連接斷開,總數:{}",webSocketSet.size());
    }
    @OnMessage
    public void onMessage(String message){
        log.info("【websocket消息】收到客戶端發來的消息:{}",message);
    }
    public void sendMessage(String message){
        for(WebSocket webSocket:webSocketSet){
            log.info("【websocket消息】廣播消息:{}",message);
            try {
                webSocket.session.getBasicRemote().sendText(message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 使用方式:

@Autowired
private WebSocket webSocket;
webSocket.sendMessage("傳遞的參數");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM