Spring Boot實現Web Socket

原文鏈接:https://www.dubby.cn/detail.html?id=9102

實現代碼

依賴

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

啟動類

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

配置

@Configuration
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Bean
    public ServerEndpointExporter serverEndpointExporter (){
        return new ServerEndpointExporter();
    }
}

WebSocket

@ServerEndpoint("/websocket")
@Component
public class MyWebSocket {
    private static AtomicLong onlineCount = new AtomicLong();
    private static ConcurrentHashMap<String, Session> webSocketMap = new ConcurrentHashMap<>();
    @OnOpen
    public void onOpen(Session session) {
        webSocketMap.put(session.getId(), session);
        System.out.println("有新鏈接加入!當前在線人數為:\t" + onlineCount.incrementAndGet());
    }
    @OnClose
    public void onClose(Session session) {
        webSocketMap.remove(session.getId());
        System.out.println("有一鏈接關閉!當前在線人數為:\t" + onlineCount.decrementAndGet());
    }
    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        System.out.println("收到消息:\t" + message);
        if (message.contains("#")) {
            String[] msgMap = message.split("#");
            String targetId = msgMap[0];
            String msg = String.format("[%s]:\t%s", session.getId(), msgMap[1]);
            session.getBasicRemote().sendText(message + "[self]");
            // 單發消息
            for (Session item : webSocketMap.values()) {
                if (item.getId().equals(targetId)) {
                    sendMessage(item, msg);
                }
            }
        } else {
            String msg = String.format("[%s]:\t%s", session.getId(), message);
            session.getBasicRemote().sendText(msg + "[自己]");
            // 群發消息
            for (Session item : webSocketMap.values()) {
                if (!item.getId().equals(session.getId())) {
                    sendMessage(item, msg);
                }
            }
        }
    }
    private void sendMessage(Session session, String message) throws IOException {
        session.getBasicRemote().sendText(message);
    }
}

Github地址

https://github.com/dubby1994/web-socket

結果截圖

第0個客戶端

image

第1個客戶端

image

第2個客戶端

image

服務端

image
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 其實知道自己能量低,有這方面的意識,說明自己生活的不麻木。我觀察自己好長一段時間了,從好幾個方面就覺得自己能量低。...
    行靜閱讀 10,240評論 0 0
  • 公眾號里的圖文消息如果插入騰訊視頻,是必須在正文中加入文字的。而有些公眾號發布的圖文消息,正文只有視頻,上面有一行...
    莉莉妮特閱讀 12,866評論 4 5
  • 嘿~花粉兒們 你們期待已久的花花財經第八期節目更新啦! 大家千萬不要錯過哦~ 上一期呢,雅琴姐姐和嘉賓們給大家分享...
    蟬鳴三境閱讀 154評論 0 0
  • 今天普度。 早上起來就開始收拾家里,因為晚上會有客人來,得保證家里干凈敞亮。 吃早飯時,得知媽媽邀請了慧婷,慧婷答...
    里弗斯丶潔閱讀 130評論 0 0
  • 一日 吃飯 飽了 放下筷子 一桌的人 紛紛夾起菜肴 放到面前的碗中 多吃點 一看你肯定沒吃飽 千萬不要餓著 菜還有...
    朱古里閱讀 245評論 0 0