可以通过TServerEventHandler获取到.
给你一段代码,不清楚的可以追问:
importjava.net.Socket;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.apache.thrift.protocol.TProtocol;importorg.apache.thrift.transport.TSocket;importorg.apache.thrift.server.ServerContext;importorg.apache.thrift.server.TServerEventHandler;importorg.apache.thrift.transport.TTransport;/***Thrift调用监控事件**仅打印连接信息日志.**@author<a*@version0.1*/publicclassMonitorServerEventHandlerimplementsTServerEventHandler{privatestaticfinalLogLOG=LogFactory.getLog(MonitorServerEventHandler.class);@OverridepublicServerContextcreateContext(TProtocolarg0,TProtocolarg1){if(arg0!=null&&arg0.getTransport()!=null){Socketsocket=((TSocket)arg0.getTransport()).getSocket();LOG.info("[Monitor]ThriftServerSocketInfo:server地址:"+socket.getLocalAddress()+",server端口:"+socket.getLocalPort()+",client地址:"+socket.getInetAddress()+",client端口:"+socket.getPort());}returnnull;}@OverridepublicvoiddeleteContext(ServerContextarg0,TProtocolarg1,TProtocolarg2){}@OverridepublicvoidpreServe(){}@OverridepublicvoidprocessContext(ServerContextarg0,TTransportarg1,TTransportarg2){}}
引用来自“LarrySu”的评论
可以通过TServerEventHandler获取到.
给你一段代码,不清楚的可以追问:
importjava.net.Socket;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.apache.thrift.protocol.TProtocol;importorg.apache.thrift.transport.TSocket;importorg.apache.thrift.server.ServerContext;importorg.apache.thrift.server.TServerEventHandler;importorg.apache.thrift.transport.TTransport;/***Thrift调用监控事件**仅打印连接信息日志.**@author<a*@version0.1*/publicclassMonitorServerEventHandlerimplementsTServerEventHandler{privatestaticfinalLogLOG=LogFactory.getLog(MonitorServerEventHandler.class);@OverridepublicServerContextcreateContext(TProtocolarg0,TProtocolarg1){if(arg0!=null&&arg0.getTransport()!=null){Socketsocket=((TSocket)arg0.getTransport()).getSocket();LOG.info("[Monitor]ThriftServerSocketInfo:server地址:"+socket.getLocalAddress()+",server端口:"+socket.getLocalPort()+",client地址:"+socket.getInetAddress()+",client端口:"+socket.getPort());}returnnull;}@OverridepublicvoiddeleteContext(ServerContextarg0,TProtocolarg1,TProtocolarg2){}@OverridepublicvoidpreServe(){}@OverridepublicvoidprocessContext(ServerContextarg0,TTransportarg1,TTransportarg2){}}
引用来自“LarrySu”的评论
可以通过TServerEventHandler获取到.
给你一段代码,不清楚的可以追问:
importjava.net.Socket;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.apache.thrift.protocol.TProtocol;importorg.apache.thrift.transport.TSocket;importorg.apache.thrift.server.ServerContext;importorg.apache.thrift.server.TServerEventHandler;importorg.apache.thrift.transport.TTransport;/***Thrift调用监控事件**仅打印连接信息日志.**@author<a*@version0.1*/publicclassMonitorServerEventHandlerimplementsTServerEventHandler{privatestaticfinalLogLOG=LogFactory.getLog(MonitorServerEventHandler.class);@OverridepublicServerContextcreateContext(TProtocolarg0,TProtocolarg1){if(arg0!=null&&arg0.getTransport()!=null){Socketsocket=((TSocket)arg0.getTransport()).getSocket();LOG.info("[Monitor]ThriftServerSocketInfo:server地址:"+socket.getLocalAddress()+",server端口:"+socket.getLocalPort()+",client地址:"+socket.getInetAddress()+",client端口:"+socket.getPort());}returnnull;}@OverridepublicvoiddeleteContext(ServerContextarg0,TProtocolarg1,TProtocolarg2){}@OverridepublicvoidpreServe(){}@OverridepublicvoidprocessContext(ServerContextarg0,TTransportarg1,TTransportarg2){}}
还有一个办法,但比较恶心:
复制TFramedTransport.java的源代码新建一个类TFramedTransport2.java.将代码"privateTTransporttransport_=null;"改为"publicTTransporttransport_=null;".其它调用的地方都用TFramedTransport2.java.然后通过TSocketsocket=(TSocket)((TFramedTransport2)in.getTransport()).transport_; 获取TSocket对象.
引用来自“LarrySu”的评论
还有一个办法,但比较恶心:
复制TFramedTransport.java的源代码新建一个类TFramedTransport2.java.将代码"privateTTransporttransport_=null;"改为"publicTTransporttransport_=null;".其它调用的地方都用TFramedTransport2.java.然后通过TSocketsocket=(TSocket)((TFramedTransport2)in.getTransport()).transport_; 获取TSocket对象.你用本地内存方式,而的不是socket方式调用吗?
引用来自“LarrySu”的评论
还有一个办法,但比较恶心:
复制TFramedTransport.java的源代码新建一个类TFramedTransport2.java.将代码"privateTTransporttransport_=null;"改为"publicTTransporttransport_=null;".其它调用的地方都用TFramedTransport2.java.然后通过TSocketsocket=(TSocket)((TFramedTransport2)in.getTransport()).transport_; 获取TSocket对象.
引用来自“LarrySu”的评论
还有一个办法,但比较恶心:
复制TFramedTransport.java的源代码新建一个类TFramedTransport2.java.将代码"privateTTransporttransport_=null;"改为"publicTTransporttransport_=null;".其它调用的地方都用TFramedTransport2.java.然后通过TSocketsocket=(TSocket)((TFramedTransport2)in.getTransport()).transport_; 获取TSocket对象.
引用来自“小乞丐”的评论
引用来自“LarrySu”的评论
还有一个办法,但比较恶心:
复制TFramedTransport.java的源代码新建一个类TFramedTransport2.java.将代码"privateTTransporttransport_=null;"改为"publicTTransporttransport_=null;".其它调用的地方都用TFramedTransport2.java.然后通过TSocketsocket=(TSocket)((TFramedTransport2)in.getTransport()).transport_; 获取TSocket对象.如果你坚持要使用THsHaServer服务,那么这个也要复制一份.eg:publicclassWstTHsHaServerextendsWstTNonblockingServer