multithreading - socket.io java client - does not connect when used threaded -
i'm using socket.io-client java library version 1.0.0 (included via pom.xml)
i want stress/performance-test socket.io based server in nodejs (the server seems work well, not of interest here).
i'm experiencing strange behaviour when establish connections doing thread.sleep between each new connection. if establish connection @ once, there no problem. problems occur when wait (thead.sleep()) milliseconds.
always after 5th established connection, connections need unusual long until established (connected callback received). next connection seems wait until first 1 disconnects, thereafter several connections established. , lot of connections aren't established @ all, no matter how long wait. strange. why happen?
it not matter, if establish connections asynychronously (doing each connection in separate thread starting threads immediately) or synchronously 1 after - works fine if don't wait between each new socket/thread creation.
this complete code:
import io.socket.client.io; import io.socket.client.socket; import io.socket.emitter.emitter; import java.net.urisyntaxexception; public class socketstresstest { private static final string socket_uri = "http://test.mydomain.com/"; public static int amount_of_sockets = 100; io.options opts; private int connectioncounter = 0; private int disconnectioncounter = 0; public static void main(string[] args) { new socketstresstest().start(); } private void start() { opts = new io.options(); opts.forcenew = true; opts.reconnection = false; thread thread = new thread(new runnable() { public void run() { initsockets(); } }); thread.start(); system.out.println("generated sockets"); } private void initsockets() { (int = 0; < amount_of_sockets; i++) { //when comment out sleeping , try-catch below, works fine try { thread.sleep(400); } catch (interruptedexception e) { e.printstacktrace(); } createsocket(i); } } private void createsocket(final int nr) { //does not matter if threaded or not: thread thread = new thread(new runnable() { public void run() { try { system.out.println("nr " + nr + " creating socket"); final socket socket = io.socket(socket_uri, opts); socket .on(socket.event_connect, new emitter.listener() { public void call(object... args) { connectioncounter++; system.out.println("nr " + nr + " connected id:" + socket.id() + " concounter:" + connectioncounter); if (connectioncounter == amount_of_sockets) system.out.println("===> connected!"); } }) .on(socket.event_disconnect, new emitter.listener() { public void call(object... args) { disconnectioncounter++; system.out.println("nr " + nr + " disconnected. discounter=" + disconnectioncounter); if (disconnectioncounter == amount_of_sockets) system.out.println("<=== disconnected!"); } }); socket.connect(); system.out.println("nr " + nr + " connect called"); } catch (urisyntaxexception e) { e.printstacktrace(); } } }); thread.start(); } } this example output(shortened), waiting 400ms inside loop:
generated sockets nr 0 creating socket nr 0 connect called nr 1 creating socket nr 1 connect called nr 0 connected id:7jlvh0hhnf0pg36maaw3 concounter:1 nr 1 connected id:5fj3i_bfia1jeulxaaw4 concounter:2 nr 2 creating socket nr 2 connect called nr 2 connected id:rqtlejftwna2jpufaaw5 concounter:3 nr 3 creating socket nr 3 connect called nr 3 connected id:dg1xl9ddnlqwaldsaaw6 concounter:4 nr 4 creating socket nr 4 connect called nr 4 connected id:y_zivi4bxdhmeiuwaaw7 concounter:5 nr 5 creating socket nr 5 connect called nr 6 creating socket nr 6 connect called ... nr 25 creating socket nr 25 connect called nr 26 creating socket nr 26 connect called nr 0 disconnected. discounter=1 nr 1 disconnected. discounter=2 nr 5 connected id:zcocg1qg1vja7pezaaw8 concounter:6 nr 6 connected id:qzja3yhcxzprzcwgaaw9 concounter:7 nr 7 connected id:anzmgdiy8bteylz3aaw- concounter:8 nr 8 connected id:vitg7xslexo5ahnoaaw_ concounter:9 nr 9 connected id:kwirqwwxe5v4itriaaxa concounter:10 nr 10 connected id:gcbddv62pzprq71qaaxb concounter:11 nr 11 connected id:4erh1jvc654ky96aaaxc concounter:12 nr 12 connected id:4qmqni7ohjk0io7xaaxd concounter:13 nr 27 creating socket nr 27 connect called nr 13 connected id:xb8i-vedae_g9n2paaxe concounter:14 nr 14 connected id:accfpvkwkwogy7teaaxf concounter:15 example output without waiting (commented out sleep(400) (shortened):
generated sockets nr 0 creating socket nr 1 creating socket ... nr 97 creating socket nr 99 creating socket nr 24 connect called nr 21 connect called nr 52 connect called ... nr 78 connect called nr 18 connect called nr 24 connected id:n4mygcp4iiwwmtjhaaxv concounter:1 nr 85 connected id:0ahc2qolgpzpquwjaaxw concounter:2 nr 68 connected id:w280v6pph-guxogoaaxx concounter:3 ... nr 38 connected id:_4c8ll0ccm_1oqyzaay2 concounter:98 nr 11 connected id:liyriuxk8pmb9voaaay3 concounter:99 nr 12 connected id:pzkw0y5dxxgw-sy6aay4 concounter:100 ===> connected! i tried on 2 different machines. same behaviour.
my goal adjust stresstests waiting, behaviour no testing possible. ideas? doing wrong? i'm doing tests on windows 10. created jar , tested on debian system. same behaviour. created similar javascript test doing simultanously on 500 socket-connections - works charm.
so there strange coded in socket.io java client library disallows more 5 connections simultanously?
Comments
Post a Comment