Skip to content

Instantly share code, notes, and snippets.

@mpfau
Forked from joakime/ClientSocket.java
Last active October 1, 2015 20:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mpfau/28e906ecead46040aa13 to your computer and use it in GitHub Desktop.
Save mpfau/28e906ecead46040aa13 to your computer and use it in GitHub Desktop.
package websocket.websocketHeap;
import java.util.concurrent.CountDownLatch;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
@WebSocket
public class ClientSocket {
private final CountDownLatch closeLatch;
public ClientSocket(CountDownLatch closeLatch)
{
this.closeLatch = closeLatch;
}
@OnWebSocketConnect
public void connect(Session session) {
System.out.println("client: connected");
}
@OnWebSocketError
public void error(Throwable cause) {
System.out.println("client: error");
cause.printStackTrace();
}
@OnWebSocketClose
public void close(int code, String reason) {
closeLatch.countDown();
System.out.printf("client: close [%d] - [%d left]%n",code, closeLatch.getCount());
}
}
package websocket.websocketHeap;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
@WebSocket
public class ServerSocket {
@OnWebSocketConnect
public void onWebSocketConnect(Session session) {
System.out.println("server: connected");
session.close();
}
@OnWebSocketError
public void onWebSocketError(Throwable cause) {
System.out.println("server: webSocketError");
cause.printStackTrace();
}
@OnWebSocketClose
public void onWebSocketClose(int statusCode, String reason) {
System.out.println("server: closed");
}
}
package websocket.websocketHeap;
import java.net.URI;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
import org.eclipse.jetty.websocket.client.WebSocketClient;
import org.eclipse.jetty.websocket.server.WebSocketHandler;
import org.eclipse.jetty.websocket.server.WebSocketServerFactory;
import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
public class WebsocketTest {
private static WebSocketServerFactory serverFactory;
public static void main(String[] args) throws Exception {
Thread.sleep(20000);
Server server = new Server(7004);
server.setHandler(new WebSocketHandler() {
@Override
public void configure(WebSocketServletFactory factory) {
WebsocketTest.serverFactory = (WebSocketServerFactory)factory;
factory.setCreator((ServletUpgradeRequest req, ServletUpgradeResponse resp) -> {
return new ServerSocket();
});
factory.getPolicy().setIdleTimeout(1000 * 5);
}
});
server.start();
WebSocketClient client = new WebSocketClient();
try {
client.start();
int clientCount = 1000;
CountDownLatch clientCloseLatch = new CountDownLatch(clientCount);
for (int i = 0; i < clientCount; i++) {
createClient(client, clientCloseLatch);
}
clientCloseLatch.await(5,TimeUnit.MINUTES);
System.out.println("All done");
validateOpenSessions(serverFactory, client);
} finally {
client.stop();
Thread.sleep(10000000);
server.stop();
}
}
private static void validateOpenSessions(WebSocketServerFactory server, WebSocketClient client)
{
System.out.printf("server.openSessions[%d]%n",server.getOpenSessions().size());
System.out.printf("client.openSessions[%d]%n",client.getOpenSessions().size());
}
private static void createClient(WebSocketClient client, CountDownLatch clientCloseLatch) throws Exception {
URI uri = URI.create("ws://localhost:7004/events/");
ClientSocket socket = new ClientSocket(clientCloseLatch);
ClientUpgradeRequest request = new ClientUpgradeRequest();
client.connect(socket, uri, request);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment