OkHttp3实现websocket代理功能

vanishskaka 2016-12-14

项目中需要实现界面操作远程机器终端的功能,所在机器上已经提供webservice服务,页面使用html5通过websokcet和远程机器进行连接,最终把终端命令操作台显示在界面上,通过界面输入进行终端命令操作。

最终效果如下:


OkHttp3实现websocket代理功能
 

     初步实现就是通过js直接连机器对外的接口地址(websokcet),但是项目要求机器的对外接口不能对外暴露,而且要支持https,所以只能采用实现websocet代理的方式进行连接,基本思路如下:

       页面jswebsocket客服端连接console websocket服务端,console websocket服务端连接console 客服端,console 客服端连远程机器websocket服务端,这样来实现一个websokcet代理,其中console就是管理控制台的网站,思路有了,但是实现这个websocket代理功能过程太曲折了,折腾了好几天。

      其中难点是怎么现实console ws客服端和机器的ws服务端的有效双向连接,并且获取到机器ws服务端返回的数据,试过Java socket API (使用@ClientEndpoint),以及Java-WebSocket 来实现java ws客服端,但是效果不如人意,连接有时候自动就断开,而且不能有效的获取机器ws服务端返回的数据,所以只能另求出路了,最后无意中发现okhttp3也已经支持了ws,带着试试心情,使用okhttp3来实现java ws客服端,最后效果杠杠的,okhttp果然强大,好了,废话不说了,直接上这ws代理功能的核心代理,由于代码在内网,只能以图片展示了。

  

 1.js ws客服端实现:

     shell 终端使用term.js来实现(项目主页:http://www.open-open.com/lib/view/home/1410080417997

     ws客服端代码如下:

    
OkHttp3实现websocket代理功能
 
OkHttp3实现websocket代理功能
 
OkHttp3实现websocket代理功能
 

2.console ws服务端实现:

     采用spring来实现console ws服务端,具体配置及代码如下:

     xml配置:

      
OkHttp3实现websocket代理功能
 

      拦截器代码:

    
OkHttp3实现websocket代理功能
       处理类代码:

       
OkHttp3实现websocket代理功能
 
OkHttp3实现websocket代理功能
 
OkHttp3实现websocket代理功能
 
OkHttp3实现websocket代理功能
 

3.console  ws 客服端实现:

    
OkHttp3实现websocket代理功能
 


OkHttp3实现websocket代理功能
 
OkHttp3实现websocket代理功能
 
OkHttp3实现websocket代理功能
 

  这就是整个websokcet代理功能的实现。

  对应的okhttp3版本如下:


OkHttp3实现websocket代理功能
 

     

相关推荐