SpringBoot集成websocket(6)|(使用OkHttpClient实现websocket的代理访问)
章节
第一章链接: SpringBoot集成websocket(1)|(websocket客户端实现)
第二章链接: SpringBoot集成websocket(2)|(websocket服务端实现以及websocket中转实现)
第三章链接: SpringBoot集成websocket(3)|(websocket调用websocket采用回调方式实现数据互传)
第四章链接: SpringBoot集成websocket(4)|(使用okhttp3实现websocket)
第五章链接: SpringBoot集成websocket(5)|(使用OkHttpClient实现websocket以及详细介绍)
第六章链接: SpringBoot集成websocket(6)|(使用OkHttpClient实现websocket的代理访问)
前言
上篇文章介绍了为什么选用OkHttpClient来实现websocket,本篇章就不过多的讲述,本章主要介绍OkHttpClient实现websocket使用代理功能,主要场景是客户现场的服务器可能不直接对外开放,必须要经过统一的代理,这个时候java服务为了调用远程url这需要设置代理地址,相对于python,python会直接过去系统的代理配置,java需要收到配置。
一、初始化OkHttpClient
每个client对象都有自己的线程池和连接池,如果为每个请求都创建一个client对象,自然会出现内存溢出。所以官方建议OkHttpClient应该单例化,重用连接和线程能降低延迟和减少内存消耗。
1.OkHttpClient实现
官方介绍了三种创建client的方式
1、new OkHttpClient()
该方式将创建一个使用默认设置的client单例对象。
2、new OkHttpClient.Builder()
该方式允许自定义配置自己的单例client对象。配置connectionTimeout, readTimeout, writeTimeout等参数。
3、okHttpclient.newBuilder()
该方式通过已经存在的client对象,创建特殊需要的client对象。如 我们通过上个方法创建了自定义配置的单例client对象,但是针对某些场景需要调整某些参数,那么就需要使用该方法创建定制的client。新client对象与旧client对象共享连接池,线程池和其他配置。
return new OkHttpClient.Builder()
.proxySelector(
new ProxySelector() {
@Override
public List<Proxy> select(URI uri) {
// 返回你想要使用的代理列表例如 proxyUrl="10.0.74.52" proxyPort=3128
return Collections.singletonList(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(config.proxyUrl, config.proxyPort)));
}
@Override
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
// 连接代理失败的回调
log.error(ioe.toString());
log.error(sa.toString());
}
}
)
.connectTimeout(50L, TimeUnit.SECONDS)
.readTimeout(3*60L, TimeUnit.SECONDS)
.build();
总结
本文主要介绍了为什么选用OkHttpClient来实现websocket,本篇章就不过多的讲述,本章主要介绍OkHttpClient实现websocket多级代理跳转中的问题优化以及springboot实现websocket的一些常见问题。