Created
October 1, 2015 20:06
-
-
Save joakime/236e65949dd43595ac05 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
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