日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
HTML服務(wù)器發(fā)送事件+使用SpringMVC的Java

HTML服務(wù)器發(fā)送事件(ServerSent Events,簡(jiǎn)稱(chēng)SSE)是一種允許服務(wù)器向客戶(hù)端推送實(shí)時(shí)更新的技術(shù),這種技術(shù)在Web應(yīng)用中非常有用,例如實(shí)時(shí)聊天、股票行情、新聞推送等場(chǎng)景,在Spring MVC中,我們可以使用SseEmitter類(lèi)來(lái)實(shí)現(xiàn)服務(wù)器發(fā)送事件。

本文將詳細(xì)介紹如何在Spring MVC中使用HTML服務(wù)器發(fā)送事件,我們需要?jiǎng)?chuàng)建一個(gè)Spring MVC項(xiàng)目,并添加相關(guān)依賴(lài),我們將編寫(xiě)一個(gè)簡(jiǎn)單的控制器來(lái)處理客戶(hù)端的請(qǐng)求,并使用SseEmitter向客戶(hù)端發(fā)送實(shí)時(shí)更新,我們將編寫(xiě)一個(gè)簡(jiǎn)單的HTML頁(yè)面來(lái)接收服務(wù)器發(fā)送的事件。

1、創(chuàng)建Spring MVC項(xiàng)目

我們首先需要?jiǎng)?chuàng)建一個(gè)Spring MVC項(xiàng)目,可以使用Eclipse、IntelliJ IDEA等IDE創(chuàng)建一個(gè)Maven或Gradle項(xiàng)目,在項(xiàng)目的pom.xml文件中,添加以下依賴(lài):


    
        org.springframework.boot
        springbootstarterweb
    
    
        org.springframework.boot
        springbootstarterwebsocket
    

2、編寫(xiě)控制器

接下來(lái),我們編寫(xiě)一個(gè)名為EventController的控制器類(lèi),用于處理客戶(hù)端的請(qǐng)求,在這個(gè)類(lèi)中,我們將使用SseEmitter向客戶(hù)端發(fā)送實(shí)時(shí)更新。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@RestController
public class EventController {
    private final ExecutorService nonBlockingService = Executors.newCachedThreadPool();
    private SseEmitter emitter = new SseEmitter();
    @GetMapping("/events")
    public SseEmitter getEvents() throws IOException {
        System.out.println("Client connected");
        emitter = new SseEmitter();
        nonBlockingService.execute(() > {
            try {
                for (int i = 0; i < 10; i++) {
                    TimeUnit.SECONDS.sleep(1);
                    emitter.send("Event " + i);
                }
            } catch (IOException | InterruptedException e) {
                emitter.completeWithError(e);
            } finally {
                try {
                    emitter.complete();
                } catch (IOException e) {
                    emitter.completeWithError(e);
                }
            }
        });
        return emitter;
    }
}

在上面的代碼中,我們首先創(chuàng)建了一個(gè)名為EventController的控制器類(lèi),并使用@RestController注解標(biāo)記它,我們定義了一個(gè)名為getEvents的方法,該方法使用@GetMapping("/events")注解映射到客戶(hù)端的請(qǐng)求,在這個(gè)方法中,我們創(chuàng)建了一個(gè)SseEmitter對(duì)象,并使用一個(gè)非阻塞線(xiàn)程池來(lái)執(zhí)行定時(shí)任務(wù),每隔1秒,我們就向客戶(hù)端發(fā)送一個(gè)事件,事件的內(nèi)容為"Event "加上當(dāng)前的計(jì)數(shù)值,當(dāng)所有事件都發(fā)送完畢后,我們調(diào)用emitter.complete()方法關(guān)閉連接,如果在發(fā)送過(guò)程中發(fā)生異常,我們調(diào)用emitter.completeWithError()方法將異常傳遞給客戶(hù)端。

3、編寫(xiě)HTML頁(yè)面

我們編寫(xiě)一個(gè)簡(jiǎn)單的HTML頁(yè)面來(lái)接收服務(wù)器發(fā)送的事件,在這個(gè)頁(yè)面中,我們使用JavaScript的EventSource對(duì)象來(lái)監(jiān)聽(tīng)服務(wù)器發(fā)送的事件,當(dāng)收到事件時(shí),我們將事件內(nèi)容顯示在一個(gè)名為eventOutput

元素中。




    
    ServerSent Events Example
    


    

ServerSent Events Example

在上面的代碼中,我們首先引入了jQuery庫(kù)和EventSource對(duì)象,我們創(chuàng)建了一個(gè)名為source的EventSource對(duì)象,并將其連接到服務(wù)器的"/events"端點(diǎn),當(dāng)收到服務(wù)器發(fā)送的事件時(shí),我們將事件內(nèi)容添加到名為eventOutput

元素中,如果在連接過(guò)程中發(fā)生錯(cuò)誤,我們將錯(cuò)誤信息輸出到控制臺(tái)。


網(wǎng)站標(biāo)題:HTML服務(wù)器發(fā)送事件+使用SpringMVC的Java
文章URL:http://www.dlmjj.cn/article/cdihhdj.html