Skip to content

Commit 4d5c361

Browse files
joakimekurtisvg
authored andcommitted
Update appengine-flex websocket usage (GoogleCloudPlatform#1526)
1 parent d695c27 commit 4d5c361

File tree

3 files changed

+48
-21
lines changed

3 files changed

+48
-21
lines changed

appengine-java8/websocket-jetty/src/main/java/com/example/flexible/websocket/jettynative/EchoServlet.java

+13-3
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,27 @@
1717
package com.example.flexible.websocket.jettynative;
1818

1919
import javax.servlet.annotation.WebServlet;
20+
21+
import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
22+
import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
23+
import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
2024
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
2125
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
2226

2327
/*
24-
* Server-side WebSocket registered as /echo servlet.
28+
* Server-side WebSocket upgraded on /echo servlet.
2529
*/
2630
@SuppressWarnings("serial")
2731
@WebServlet(name = "Echo WebSocket Servlet", urlPatterns = { "/echo" })
28-
public class EchoServlet extends WebSocketServlet {
32+
public class EchoServlet extends WebSocketServlet implements WebSocketCreator {
2933
@Override
3034
public void configure(WebSocketServletFactory factory) {
31-
factory.register(ServerSocket.class);
35+
factory.setCreator(this);
36+
}
37+
38+
@Override
39+
public Object createWebSocket(ServletUpgradeRequest servletUpgradeRequest,
40+
ServletUpgradeResponse servletUpgradeResponse) {
41+
return new ServerSocket();
3242
}
3343
}

appengine-java8/websocket-jetty/src/main/java/com/example/flexible/websocket/jettynative/SendServlet.java

+21-8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import javax.servlet.http.HttpServlet;
2727
import javax.servlet.http.HttpServletRequest;
2828
import javax.servlet.http.HttpServletResponse;
29+
30+
import org.eclipse.jetty.client.HttpClient;
2931
import org.eclipse.jetty.http.HttpStatus;
3032
import org.eclipse.jetty.util.ssl.SslContextFactory;
3133
import org.eclipse.jetty.websocket.api.Session;
@@ -52,10 +54,12 @@ public class SendServlet extends HttpServlet {
5254
// GAE_SERVICE environment variable is set to the GCP service name.
5355
private static final String GAE_SERVICE_ENV_VAR = "GAE_SERVICE";
5456

57+
private final HttpClient httpClient;
5558
private final WebSocketClient webSocketClient;
5659
private final ClientSocket clientSocket;
5760

5861
public SendServlet() {
62+
this.httpClient = createHttpClient();
5963
this.webSocketClient = createWebSocketClient();
6064
this.clientSocket = new ClientSocket();
6165
}
@@ -73,22 +77,31 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr
7377
}
7478
}
7579

76-
private WebSocketClient createWebSocketClient() {
77-
WebSocketClient webSocketClient;
80+
private HttpClient createHttpClient() {
81+
HttpClient httpClient;
7882
if (System.getenv(GAE_INSTANCE_VAR) != null) {
7983
// If on HTTPS, create client with SSL Context
80-
SslContextFactory sslContextFactory = new SimpleContainerScope(
81-
WebSocketPolicy.newClientPolicy())
82-
.getSslContextFactory();
83-
webSocketClient = new WebSocketClient(sslContextFactory);
84+
SslContextFactory sslContextFactory = new SslContextFactory();
85+
httpClient = new HttpClient(sslContextFactory);
8486
} else {
8587
// local testing on HTTP
86-
webSocketClient = new WebSocketClient();
88+
httpClient = new HttpClient();
8789
}
88-
return webSocketClient;
90+
return httpClient;
91+
}
92+
93+
private WebSocketClient createWebSocketClient() {
94+
return new WebSocketClient(this.httpClient);
8995
}
9096

9197
private void sendMessageOverWebSocket(String message) throws Exception {
98+
if (!httpClient.isRunning()) {
99+
try {
100+
httpClient.start();
101+
} catch (URISyntaxException e) {
102+
e.printStackTrace();
103+
}
104+
}
92105
if (!webSocketClient.isRunning()) {
93106
try {
94107
webSocketClient.start();

appengine-java8/websocket-jetty/src/main/java/com/example/flexible/websocket/jettynative/ServerSocket.java

+14-10
Original file line numberDiff line numberDiff line change
@@ -20,40 +20,44 @@
2020
import java.util.logging.Logger;
2121
import org.eclipse.jetty.websocket.api.Session;
2222
import org.eclipse.jetty.websocket.api.WebSocketAdapter;
23+
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
24+
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
25+
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
26+
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
27+
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
2328

2429
/*
2530
* Server-side WebSocket : echoes received message back to client.
2631
*/
27-
public class ServerSocket extends WebSocketAdapter {
32+
@WebSocket(maxTextMessageSize = 64 * 1024)
33+
public class ServerSocket {
2834
private Logger logger = Logger.getLogger(SendServlet.class.getName());
35+
private Session session;
2936

30-
@Override
37+
@OnWebSocketConnect
3138
public void onWebSocketConnect(Session session) {
32-
super.onWebSocketConnect(session);
39+
this.session = session;
3340
logger.fine("Socket Connected: " + session);
3441
}
3542

36-
@Override
43+
@OnWebSocketMessage
3744
public void onWebSocketText(String message) {
38-
super.onWebSocketText(message);
3945
logger.fine("Received message: " + message);
4046
try {
4147
// echo message back to client
42-
getRemote().sendString(message);
48+
this.session.getRemote().sendString(message);
4349
} catch (IOException e) {
4450
logger.severe("Error echoing message: " + e.getMessage());
4551
}
4652
}
4753

48-
@Override
54+
@OnWebSocketClose
4955
public void onWebSocketClose(int statusCode, String reason) {
50-
super.onWebSocketClose(statusCode, reason);
5156
logger.fine("Socket Closed: [" + statusCode + "] " + reason);
5257
}
5358

54-
@Override
59+
@OnWebSocketError
5560
public void onWebSocketError(Throwable cause) {
56-
super.onWebSocketError(cause);
5761
logger.severe("Websocket error : " + cause.getMessage());
5862
}
5963
}

0 commit comments

Comments
 (0)