使用thrift做项目的时候,用到了thrift框架,后来遇到一个很棘手的问题,就是在使用TBinaryProtocol TFramedTransport TNonblockingServerSocket等协议时,服务器端无法得到client的ip地址。
经过了几天的研究,发现如下方法可以极简(三行)更改代码的同时,解决获取ip的问题。
服务器代码:
public static void main(String[] args) {
try {
TNonblockingServerSocket socket = new TNonblockingServerSocket(PORT);
TProcessor processor = new KkLog.Processor(new KkServiceImpl());
TThreadedSelectorServer.Args arg = new TThreadedSelectorServer.Args(socket);
arg.transportFactory(new TFramedTransport.Factory());
arg.protocolFactory(new TBinaryProtocol.Factory());
arg.processorFactory(new TProcessorFactory(processor));
TServer server = new TThreadedSelectorServer(arg);
server.serve();
} catch (TTransportException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
客户端代码:
public static void main(String[] args) {
if(args.length<1){
System.out.println("run as java -jar KkClient.jar serverIP");
return ;
}
TTransport transport = new TFramedTransport(new TSocket(IP, PORT, clientTimeout));
TProtocol protocol = new TBinaryProtocol(transport);
KkLog.Client client = new KkLog.Client(protocol);
try {
transport.open();
client.sendLog("0.0.0.0", data); //这里客户端调用sendLog发送data,前面是ip