thrift/swift/nifty:获取客户端ip的简单方法
发布时间:2020-12-14 06:02:01 所属栏目:百科 来源:网络整理
导读:一个RPC方法中需要知道客户端的IP要怎么实现? 网上看了一堆关于thrift获取获取client ip的文章,基本都要自己写一个TServerEventHandler或TProcessor来实现。如下,所有的文章讲到的都是这两种方法。 《两种方式获取Thrift调用的客户端IP地址》 虽然没有再
一个RPC方法中需要知道客户端的IP要怎么实现?
虽然没有再深入研究,但我想如果用thrift这应该是正确的办法。 研究了Niffy代码发现,获取客户端IP相当简单,示例如下: import java.net.SocketAddress;
...
import com.facebook.nifty.core.ConnectionContext;
import com.facebook.nifty.core.RequestContext;
import com.facebook.nifty.core.RequestContexts;
...
// RPC接口方法
@Override
public PersonBean savePerson(PersonBean bean)throws ServiceRuntimeException {
//...业务代码
// 获取当前的请求上下文
RequestContext ctx = RequestContexts.getCurrentContext();
// 获取连接上下文
ConnectionContext connect = ctx.getConnectionContext();
// 获取IP地址
SocketAddress address = connect.getRemoteAddress();
System.out.println(address);
//...业务代码
}
...
另附上基于nifty的thrift server初始化代码片段 public static final int DEFAULT_PORT = 26411;
private final ExecutorService executor;
private final ThriftServer server;
private final int serverPort;
private final ThriftServiceProcessor processor;
public Server(List<?> services,int serverPort,ExecutorService executor) {
checkArgument(null != services && !services.isEmpty());
this.serverPort = serverPort>0? serverPort : DEFAULT_PORT;
this.executor = checkNotNull(executor);
processor = new ThriftServiceProcessor(
new ThriftCodecManager(),ImmutableList.<ThriftEventHandler>of(),services
);
ThriftServerDef serverDef = ThriftServerDef.newBuilder()
.listen(serverPort)
.withProcessor(processor)
.using(this.executor)
.build();
NettyServerConfig serverConfig = NettyServerConfig.newBuilder()
.setBossThreadExecutor(this.executor)
.setWorkerThreadExecutor(this.executor)
.build();
server = new ThriftServer(serverConfig,serverDef);
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |