Skip to content

Commit 42fcad4

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 3bc2dbb + 5871403 commit 42fcad4

File tree

4 files changed

+78
-6
lines changed

4 files changed

+78
-6
lines changed

src/main/java/cn/netbuffer/springboot/websocket/demo/config/SpringWebSocketConfig.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cn.netbuffer.springboot.websocket.demo.config;
22

3+
import cn.netbuffer.springboot.websocket.demo.websocket.handler.MessageHandler;
34
import cn.netbuffer.springboot.websocket.demo.websocket.handler.TextHandler;
45
import lombok.extern.slf4j.Slf4j;
56
import org.springframework.context.annotation.Bean;
@@ -14,12 +15,18 @@ public class SpringWebSocketConfig implements WebSocketConfigurer {
1415

1516
@Override
1617
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
17-
registry.addHandler(buildTextHandler(), "/ws").setAllowedOrigins("*");
18+
// registry.addHandler(buildTextHandler(), "/ws").setAllowedOrigins("*");
19+
registry.addHandler(buildMessageHandler(), "/ws").setAllowedOrigins("*");
1820
}
1921

2022
@Bean
2123
public WebSocketHandler buildTextHandler() {
2224
return new TextHandler();
2325
}
2426

27+
@Bean
28+
public WebSocketHandler buildMessageHandler() {
29+
return new MessageHandler();
30+
}
31+
2532
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package cn.netbuffer.springboot.websocket.demo.websocket.handler;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.web.socket.*;
5+
import org.springframework.web.socket.handler.AbstractWebSocketHandler;
6+
7+
@Slf4j
8+
public class MessageHandler extends AbstractWebSocketHandler {
9+
10+
@Override
11+
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
12+
super.afterConnectionEstablished(session);
13+
SessionManager.put(session.getId(), session);
14+
log.info("session[{}] afterConnectionEstablished", session.getId());
15+
}
16+
17+
@Override
18+
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
19+
log.info("session[{}] afterConnectionClosed", session.getId());
20+
SessionManager.remove(session.getId());
21+
}
22+
23+
@Override
24+
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
25+
log.info("session[{}] receive text message={}", session.getId(), message);
26+
}
27+
28+
@Override
29+
protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
30+
log.info("session[{}] receive binary message={} length={}", session.getId(), message, message.getPayloadLength());
31+
}
32+
33+
@Override
34+
protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
35+
log.info("session[{}] receive pong message={}", session.getId(), message);
36+
}
37+
38+
@Override
39+
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
40+
}
41+
42+
}

src/main/java/cn/netbuffer/springboot/websocket/demo/websocket/handler/TextHandler.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,20 @@
99
@Slf4j
1010
public class TextHandler extends TextWebSocketHandler {
1111

12+
private static final String HEARTBEAT_PING = "PING";
13+
private static final String HEARTBEAT_PONG = "PONG";
14+
private static final TextMessage HEARTBEAT_PONG_MESSAGE = new TextMessage(HEARTBEAT_PONG);
15+
1216
@Override
1317
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
1418
if (session.isOpen()) {
1519
log.info("receive websocket message:{} session:{}", message, session.getId());
16-
TextMessage returnMessage = new TextMessage(message.getPayload() + " received at server");
17-
session.sendMessage(returnMessage);
20+
if (message.getPayload().equals(HEARTBEAT_PING)) {
21+
session.sendMessage(HEARTBEAT_PONG_MESSAGE);
22+
} else {
23+
TextMessage returnMessage = new TextMessage(message.getPayload() + " received at server");
24+
session.sendMessage(returnMessage);
25+
}
1826
}
1927
}
2028

src/main/resources/templates/index.html

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,23 @@
66
<link href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css" rel="stylesheet"/>
77
</head>
88
<body>
9-
<div th:each="item,it : ${sessions}">
10-
<div>index:<span th:text="${it.index}"></span></div>
11-
<div>item:<span th:text="${item}"></span></div>
9+
<ul th:each="item,it : ${sessions}">
10+
<!-- <li>index:<span th:text="${it.index}"></span></li>-->
11+
<li>会话:<span th:text="${item}"></span><button th:onclick="send_msg([[${item}]])">send</button></li>
12+
</ul>
13+
<script>
14+
function send_msg(key) {
15+
console.log("key:%o", key);
16+
var msg = prompt("请输入消息内容");
17+
fetch("/ws/" + key + "/send?msg=" + msg)
18+
.then(function (response) {
19+
return response;
20+
})
21+
.then(function (response) {
22+
console.log(`send msg success`);
23+
alert("send success");
24+
});
25+
}
26+
</script>
1227
</body>
1328
</html>

0 commit comments

Comments
 (0)