File tree Expand file tree Collapse file tree 12 files changed +263
-3
lines changed
solon-jakarta-projects/solon-server
solon-server-jetty-add-websocket-jakarta
src/test/java/features/jetty/ws
solon-server-tomcat-add-websocket-jakarta
src/test/java/features/tomcat/ws
solon-server-undertow-jakarta
src/test/java/features/undertow Expand file tree Collapse file tree 12 files changed +263
-3
lines changed Original file line number Diff line number Diff line change 1818 <description >Java project for solon</description >
1919
2020 <dependencies >
21+ <dependency >
22+ <groupId >org.noear</groupId >
23+ <artifactId >solon-server-jetty-jakarta</artifactId >
24+ </dependency >
25+
2126 <dependency >
2227 <groupId >jakarta.servlet</groupId >
2328 <artifactId >jakarta.servlet-api</artifactId >
2934 <artifactId >jetty-websocket-jetty-server</artifactId >
3035 <version >${jetty.jakarta.version} </version >
3136 </dependency >
37+
38+ <dependency >
39+ <groupId >org.noear</groupId >
40+ <artifactId >solon-test</artifactId >
41+ <scope >test</scope >
42+ </dependency >
43+
44+ <dependency >
45+ <groupId >org.noear</groupId >
46+ <artifactId >solon-logging-simple</artifactId >
47+ <scope >test</scope >
48+ </dependency >
49+
50+ <dependency >
51+ <groupId >org.noear</groupId >
52+ <artifactId >java-websocket-ns</artifactId >
53+ <version >${java-websocket-ns.version} </version >
54+ <scope >test</scope >
55+ </dependency >
3256 </dependencies >
3357
3458</project >
Original file line number Diff line number Diff line change 1+ package features .jetty .ws ;
2+
3+ import org .java_websocket .client .WebSocketClient ;
4+ import org .junit .jupiter .api .Test ;
5+ import org .noear .java_websocket .client .SimpleWebSocketClient ;
6+ import org .noear .solon .test .SolonTest ;
7+
8+ import java .net .URI ;
9+ import java .util .concurrent .CompletableFuture ;
10+ import java .util .concurrent .TimeUnit ;
11+
12+ /**
13+ *
14+ * @author noear 2025/12/3 created
15+ *
16+ */
17+ @ SolonTest (ServerApp .class )
18+ public class ClientTest {
19+ @ Test
20+ public void test_async_message3_self_ws () throws Throwable {
21+ CompletableFuture <Boolean > check = new CompletableFuture <>();
22+ WebSocketClient webSocketClient = new SimpleWebSocketClient (URI .create ("ws://localhost:8080/demo" )){
23+ @ Override
24+ public void onMessage (String message ) {
25+ System .out .println ("异步发送-ws-self::实例监到,收到了:" + message );
26+ check .complete (true );
27+ }
28+ };
29+ webSocketClient .connectBlocking ();
30+
31+ //异步发
32+ webSocketClient .send ("test0" );
33+ webSocketClient .send ("test1" );
34+ webSocketClient .send ("test2" );
35+ webSocketClient .send ("test3" );
36+
37+ assert check .get (2 , TimeUnit .SECONDS );
38+
39+ webSocketClient .close ();
40+
41+ Thread .sleep (100 );
42+ }
43+ }
Original file line number Diff line number Diff line change 1+ package features .jetty .ws ;
2+
3+ import org .noear .solon .Solon ;
4+ import org .noear .solon .net .annotation .ServerEndpoint ;
5+ import org .noear .solon .net .websocket .WebSocket ;
6+ import org .noear .solon .net .websocket .listener .SimpleWebSocketListener ;
7+
8+ import java .io .IOException ;
9+
10+ @ ServerEndpoint ("/demo" )
11+ public class ServerApp extends SimpleWebSocketListener {
12+ public static void main (String [] args ) throws Exception {
13+ Solon .start (ServerApp .class , args , app -> {
14+ app .enableWebSocket (true );
15+ });
16+ }
17+
18+ @ Override
19+ public void onMessage (WebSocket socket , String text ) throws IOException {
20+ socket .send ("收到" + text );
21+ }
22+ }
Original file line number Diff line number Diff line change 1818 <description >Java project for solon</description >
1919
2020 <dependencies >
21+ <dependency >
22+ <groupId >org.noear</groupId >
23+ <artifactId >solon-server-tomcat-jakarta</artifactId >
24+ </dependency >
25+
2126 <dependency >
2227 <groupId >jakarta.servlet</groupId >
2328 <artifactId >jakarta.servlet-api</artifactId >
2934 <artifactId >tomcat-embed-websocket</artifactId >
3035 <version >${tomcat.jakarta.version} </version >
3136 </dependency >
37+
38+ <dependency >
39+ <groupId >org.noear</groupId >
40+ <artifactId >solon-test</artifactId >
41+ <scope >test</scope >
42+ </dependency >
43+
44+ <dependency >
45+ <groupId >org.noear</groupId >
46+ <artifactId >solon-logging-simple</artifactId >
47+ <scope >test</scope >
48+ </dependency >
49+
50+ <dependency >
51+ <groupId >org.noear</groupId >
52+ <artifactId >java-websocket-ns</artifactId >
53+ <version >${java-websocket-ns.version} </version >
54+ <scope >test</scope >
55+ </dependency >
3256 </dependencies >
3357
3458</project >
Original file line number Diff line number Diff line change 1+ package features .tomcat .ws ;
2+
3+ import org .java_websocket .client .WebSocketClient ;
4+ import org .junit .jupiter .api .Test ;
5+ import org .noear .java_websocket .client .SimpleWebSocketClient ;
6+ import org .noear .solon .test .SolonTest ;
7+
8+ import java .net .URI ;
9+ import java .util .concurrent .CompletableFuture ;
10+ import java .util .concurrent .TimeUnit ;
11+
12+ @ SolonTest (ServerApp .class )
13+ public class ClientTest {
14+ @ Test
15+ public void test_async_message3_self_ws () throws Throwable {
16+ CompletableFuture <Boolean > check = new CompletableFuture <>();
17+ WebSocketClient webSocketClient = new SimpleWebSocketClient (URI .create ("ws://localhost:8080/demo" )){
18+ @ Override
19+ public void onMessage (String message ) {
20+ System .out .println ("异步发送-ws-self::实例监到,收到了:" + message );
21+ check .complete (true );
22+ }
23+ };
24+ webSocketClient .connectBlocking ();
25+
26+ //异步发
27+ webSocketClient .send ("test0" );
28+ webSocketClient .send ("test1" );
29+ webSocketClient .send ("test2" );
30+ webSocketClient .send ("test3" );
31+
32+ assert check .get (2 , TimeUnit .SECONDS );
33+
34+ webSocketClient .close ();
35+
36+ Thread .sleep (100 );
37+ }
38+ }
Original file line number Diff line number Diff line change 1+ package features .tomcat .ws ;
2+
3+ import org .noear .solon .Solon ;
4+ import org .noear .solon .net .annotation .ServerEndpoint ;
5+ import org .noear .solon .net .websocket .WebSocket ;
6+ import org .noear .solon .net .websocket .listener .SimpleWebSocketListener ;
7+
8+ import java .io .IOException ;
9+
10+ @ ServerEndpoint ("/demo" )
11+ public class ServerApp extends SimpleWebSocketListener {
12+ public static void main (String [] args ) throws Exception {
13+ Solon .start (ServerApp .class , args , app -> {
14+ app .enableWebSocket (true );
15+ });
16+ }
17+
18+ @ Override
19+ public void onMessage (WebSocket socket , String text ) throws IOException {
20+ socket .send ("收到" + text );
21+ }
22+ }
Original file line number Diff line number Diff line change 120120 <scope >test</scope >
121121 </dependency >
122122
123+ <dependency >
124+ <groupId >org.noear</groupId >
125+ <artifactId >java-websocket-ns</artifactId >
126+ <version >${java-websocket-ns.version} </version >
127+ <scope >test</scope >
128+ </dependency >
129+
123130 <dependency >
124131 <groupId >org.noear</groupId >
125132 <artifactId >solon-view-jsp-jakarta</artifactId >
Original file line number Diff line number Diff line change 1- package features .undertow ;
1+ package features .undertow . http ;
22
33import org .noear .solon .Solon ;
44import org .noear .solon .annotation .Controller ;
Original file line number Diff line number Diff line change 1- package features .undertow ;
1+ package features .undertow . http ;
22
33import org .noear .solon .annotation .Component ;
44import org .noear .solon .annotation .Mapping ;
Original file line number Diff line number Diff line change 1- package features .undertow ;
1+ package features .undertow . http ;
22
3+ import org .junit .jupiter .api .AfterAll ;
34import org .junit .jupiter .api .Test ;
5+ import org .noear .solon .Solon ;
46import org .noear .solon .core .util .MimeType ;
57import org .noear .solon .core .util .MultiMap ;
68import org .noear .solon .net .http .HttpResponse ;
@@ -50,4 +52,12 @@ public void ct1() {
5052 assert path ("/hello" ).exec ("GET" ).contentType ()
5153 .startsWith (MimeType .TEXT_PLAIN_VALUE );
5254 }
55+
56+ @ AfterAll
57+ public static void allAft () {
58+ //避免与同项目的,边上的 app 冲突
59+ if (Solon .app () != null ) {
60+ Solon .stopBlock ();
61+ }
62+ }
5363}
You can’t perform that action at this time.
0 commit comments