Skip to content

Commit d46fcb2

Browse files
committed
feat: support proxy (#14)
1 parent 13bd2e2 commit d46fcb2

File tree

4 files changed

+107
-3
lines changed

4 files changed

+107
-3
lines changed

docs/others.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,63 @@ public class Test6 {
119119
}
120120
}
121121

122+
```
123+
124+
125+
### 关于代理
126+
127+
* sdk初始化时支持设置代理
128+
* 可以使用Proxy,也可以使用ProxySelector
129+
130+
```java
131+
132+
public class Test6 {
133+
134+
public static void main(String[] args) {
135+
String appkey = "xx";
136+
String appsecret = "xx";
137+
int timeoutMillis = 5000;
138+
139+
Proxy proxy = new Proxy(Proxy.Type.SOCKS, "10.0.0.0", 1080);
140+
141+
//
142+
YunxinApiHttpClient client = new YunxinApiHttpClient.Builder(BizName.IM, appkey, appsecret)
143+
.timeoutMillis(timeoutMillis)
144+
.proxy(proxy)
145+
.build();
146+
}
147+
}
148+
149+
```
150+
151+
```java
152+
153+
public class Test6 {
154+
155+
public static void main(String[] args) {
156+
String appkey = "xx";
157+
String appsecret = "xx";
158+
int timeoutMillis = 5000;
159+
160+
ProxySelector proxySelector = new ProxySelector() {
161+
@Override
162+
public List<Proxy> select(URI uri) {
163+
// your custom logic
164+
return null;
165+
}
166+
167+
@Override
168+
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
169+
// your custom logic
170+
}
171+
};
172+
173+
//
174+
YunxinApiHttpClient client = new YunxinApiHttpClient.Builder(BizName.IM, appkey, appsecret)
175+
.timeoutMillis(timeoutMillis)
176+
.proxySelector(proxySelector)
177+
.build();
178+
}
179+
}
180+
122181
```

src/main/java/com/netease/nim/server/sdk/core/YunxinApiHttpClient.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import com.netease.nim.server.sdk.core.metrics.MetricsCallback;
1212
import com.netease.nim.server.sdk.core.trace.ApiVersion;
1313

14+
import java.net.Proxy;
15+
import java.net.ProxySelector;
1416
import java.util.Map;
1517
import java.util.concurrent.ConcurrentHashMap;
1618

@@ -102,6 +104,22 @@ public Builder httpClientConfig(YunxinHttpClientConfig httpClientConfig) {
102104
return this;
103105
}
104106

107+
public Builder proxy(Proxy proxy) {
108+
if (proxy == null) {
109+
throw new IllegalArgumentException("proxy is null");
110+
}
111+
httpClientConfig.setProxy(proxy);
112+
return this;
113+
}
114+
115+
public Builder proxySelector(ProxySelector proxySelector) {
116+
if (proxySelector == null) {
117+
throw new IllegalArgumentException("proxySelector is null");
118+
}
119+
httpClientConfig.setProxySelector(proxySelector);
120+
return this;
121+
}
122+
105123
public Builder metricEnable(boolean enable) {
106124
this.metricsConfig.setEnable(enable);
107125
return this;

src/main/java/com/netease/nim/server/sdk/core/YunxinHttpClient.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,19 @@ public YunxinHttpClient(BizName bizName, String appkey, String appsecret, Endpoi
6262
Dispatcher dispatcher = new Dispatcher();
6363
dispatcher.setMaxRequests(httpClientConfig.getMaxRequests());
6464
dispatcher.setMaxRequestsPerHost(httpClientConfig.getMaxRequestsPerHost());
65-
this.okHttpClient = new OkHttpClient.Builder()
65+
OkHttpClient.Builder builder = new OkHttpClient.Builder()
6666
.connectTimeout(httpClientConfig.getConnectTimeoutMillis(), TimeUnit.MILLISECONDS)
6767
.readTimeout(httpClientConfig.getReadTimeoutMillis(), TimeUnit.MILLISECONDS)
6868
.writeTimeout(httpClientConfig.getWriteTimeoutMillis(), TimeUnit.MILLISECONDS)
6969
.dispatcher(dispatcher)
70-
.connectionPool(new ConnectionPool(httpClientConfig.getMaxIdleConnections(), httpClientConfig.getKeepAliveSeconds(), TimeUnit.SECONDS))
71-
.build();
70+
.connectionPool(new ConnectionPool(httpClientConfig.getMaxIdleConnections(), httpClientConfig.getKeepAliveSeconds(), TimeUnit.SECONDS));
71+
if (httpClientConfig.getProxy() != null) {
72+
builder.proxy(httpClientConfig.getProxy());
73+
}
74+
if (httpClientConfig.getProxySelector() != null) {
75+
builder.proxySelector(httpClientConfig.getProxySelector());
76+
}
77+
this.okHttpClient = builder.build();
7278
this.endpointSelector.init(okHttpClient);
7379
}
7480

src/main/java/com/netease/nim/server/sdk/core/YunxinHttpClientConfig.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.netease.nim.server.sdk.core;
22

33

4+
import java.net.Proxy;
5+
import java.net.ProxySelector;
6+
47
/**
58
* Created by caojiajun on 2024/11/27
69
*/
@@ -13,6 +16,8 @@ public class YunxinHttpClientConfig {
1316
private int maxRequestsPerHost = Constants.Http.maxRequestsPerHost;
1417
private int keepAliveSeconds = Constants.Http.keepAliveSeconds;
1518
private int maxIdleConnections = Constants.Http.maxIdleConnections;
19+
private Proxy proxy;
20+
private ProxySelector proxySelector;
1621

1722
public long getConnectTimeoutMillis() {
1823
return connectTimeoutMillis;
@@ -69,4 +74,20 @@ public int getMaxIdleConnections() {
6974
public void setMaxIdleConnections(int maxIdleConnections) {
7075
this.maxIdleConnections = maxIdleConnections;
7176
}
77+
78+
public Proxy getProxy() {
79+
return proxy;
80+
}
81+
82+
public void setProxy(Proxy proxy) {
83+
this.proxy = proxy;
84+
}
85+
86+
public ProxySelector getProxySelector() {
87+
return proxySelector;
88+
}
89+
90+
public void setProxySelector(ProxySelector proxySelector) {
91+
this.proxySelector = proxySelector;
92+
}
7293
}

0 commit comments

Comments
 (0)