java socket.io第三方库使用记录

做一个可供测试人员可视化的压力测试工具,无奈服务器是基于socketio的方式,那怎么办?js?一个浏览器只能开二百多个,开一堆浏览器?也不方便各种模拟操作。nodejs?不熟,不会玩。C?不会mfc那些。最熟swing,只好用java。

然后发现socket.io也有java版本,当然是个人改写的。

坑很多,资料很约等于0,不看源码完全不知道怎么搞。

socket.io说白了就是把okhttp这个库的再封装一遍,另外还借鉴了engine.io这个库。作为简单的创建使用,git上的简单说明是足够了,但是深层次的使用,还是赶紧看看具体实现把。

我这边2个需求,一个是在一个进程中创建成千上万个连接,另一个有命名空间的情况下依然可以创建创建成千上万的连接。

那么一开始按照git上的示例,直接for几千个  最终只连了5个!!!

查源码,发现okhttp默认的连接数是5,而socket.io封装的情况下,并不创建新的okhttp 新对象,而是复用!!!草,那么只能手动创建okhttp的新对象,并且通过socket.io库中的Option 的对象:

options.webSocketFactory = okHttpClient;
options.callFactory = okHttpClient;

方式传过去。再传给IO.socket函数创建的对象。

ok,这里解决了连接问题。

然后是命名空间的连接:

直接类似与js 的socket.io写法,无效。

查源码,socket.io 中的Manager主要用于解析命名空间相关操作,但是为什么没有按预期解析,没细看。不管,直接创建Manager的对象manager,通过manager来连接manager = new Manager(new URI(str1),options);  再socket= manager.socket("/xxx"); 问题解决。注意options,必须这么传,虽然manager.socket("/xxx",options);也可以,但是这里的options接收的实体可能是一个static的全局作用的玩意儿,无论创建多少个options最后传过去后,生效的是最后一个。且所有连接都用这最后一个,导致连接数又tm只能5个。

全是坑。算了,有总比没有好。

你可能感兴趣的:(java socket.io第三方库使用记录)