国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WebSocketServer后端配置,精簡(jiǎn)版

這篇具有很好參考價(jià)值的文章主要介紹了WebSocketServer后端配置,精簡(jiǎn)版。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

首先需要maven配置

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

然后加上配置類

這段代碼是一個(gè)Spring配置類,主要作用是注冊(cè)WebSocket端點(diǎn),讓使用了`@ServerEndpoint`注解聲明的WebSocket端點(diǎn)能夠自動(dòng)注冊(cè)并生效。具體來(lái)說:

- `@Configuration`注解表明這是一個(gè)配置類,Spring會(huì)自動(dòng)掃描并加載這個(gè)配置類。
- `@Bean`注解標(biāo)記了`serverEndpointExporter()`方法,這個(gè)方法返回一個(gè)`ServerEndpointExporter`實(shí)例。
- `ServerEndpointExporter` 是一個(gè)特殊的Spring Bean,它的作用是自動(dòng)注冊(cè)使用`@ServerEndpoint`注解聲明的WebSocket端點(diǎn)。

簡(jiǎn)單來(lái)說,通過這段代碼配置,Spring會(huì)掃描項(xiàng)目中使用`@ServerEndpoint`注解聲明的WebSocket端點(diǎn),并自動(dòng)注冊(cè)這些端點(diǎn),使它們能夠被正確地映射和使用。

總的來(lái)說,這個(gè)配置類的作用是為WebSocket端點(diǎn)的自動(dòng)注冊(cè)提供支持,簡(jiǎn)化了WebSocket端點(diǎn)的配置過程,讓開發(fā)者更方便地使用WebSocket功能。


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

@Configuration
public class WebSocketClientConfig {

    /**
     * ServerEndpointExporter 作用
     *
     * 這個(gè)Bean會(huì)自動(dòng)注冊(cè)使用@ServerEndpoint注解聲明的websocket endpoint
     *
     * @return
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}

最后加上主程序文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-847126.html


@ServerEndpoint(value = "/imserver/{username}")
@Component
public class WebSocketServer {
    private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
    /**
     * 記錄當(dāng)前在線連接數(shù)
     */
    public static final Map<String, Session> sessionMap = new ConcurrentHashMap<>();
    /**
     * 連接建立成功調(diào)用的方法
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("username") String username) {
        sessionMap.put(username, session);
        log.info("有新用戶加入,username={}, 當(dāng)前在線人數(shù)為:{}", username, sessionMap.size());
        JSONObject result = new JSONObject();
        JSONArray array = new JSONArray();
        result.set("users", array);
        for (Object key : sessionMap.keySet()) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.set("username", key);
            array.add(jsonObject);
        }
        sendAllMessage(JSONUtil.toJsonStr(result));
    }
    /**
     * 連接關(guān)閉調(diào)用的方法
     */
    @OnClose
    public void onClose(Session session, @PathParam("username") String username) {
        sessionMap.remove(username);
        log.info("有一連接關(guān)閉,移除username={}的用戶session, 當(dāng)前在線人數(shù)為:{}", username, sessionMap.size());
    }
    /**
     * 收到客戶端消息后調(diào)用的方法
     * 后臺(tái)收到客戶端發(fā)送過來(lái)的消息
     * onMessage 是一個(gè)消息的中轉(zhuǎn)站
     * 接受 瀏覽器端 socket.send 發(fā)送過來(lái)的 json數(shù)據(jù)
     * @param message 客戶端發(fā)送過來(lái)的消息
     */
    @OnMessage
    public void onMessage(String message, Session session, @PathParam("username") String username) {
        log.info("服務(wù)端收到用戶username={}的消息:{}", username, message);
        JSONObject obj = JSONUtil.parseObj(message);
        String toUsername = obj.getStr("to");
        String text = obj.getStr("text");
        Session toSession = sessionMap.get(toUsername);
        if (toSession != null) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.set("from", username);
            jsonObject.set("text", text);
            this.sendMessage(jsonObject.toString(), toSession);
            log.info("發(fā)送給用戶username={},消息:{}", toUsername, jsonObject.toString());
        } else {
            log.info("發(fā)送失敗,未找到用戶username={}的session", toUsername);
        }
    }
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("發(fā)生錯(cuò)誤");
        error.printStackTrace();
    }
    /**
     * 服務(wù)端發(fā)送消息給客戶端
     */
    private void sendMessage(String message, Session toSession) {
        try {
            log.info("服務(wù)端給客戶端[{}]發(fā)送消息{}", toSession.getId(), message);
            toSession.getBasicRemote().sendText(message);
        } catch (Exception e) {
            log.error("服務(wù)端發(fā)送消息給客戶端失敗", e);
        }
    }
    /**
     * 服務(wù)端發(fā)送消息給所有客戶端
     */
    private void sendAllMessage(String message) {
        try {
            for (Session session : sessionMap.values()) {
                log.info("服務(wù)端給客戶端[{}]發(fā)送消息{}", session.getId(), message);
                session.getBasicRemote().sendText(message);
            }
        } catch (Exception e) {
            log.error("服務(wù)端發(fā)送消息給客戶端失敗", e);
        }
    }
}

到了這里,關(guān)于WebSocketServer后端配置,精簡(jiǎn)版的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包