Java 将Guava用于sockets客户端库
我正在写一个小的客户端库来帮助我完成一个Android项目。所以我现在在学番石榴,我有点困了 TCP服务器具有2种功能:Java 将Guava用于sockets客户端库,java,sockets,guava,Java,Sockets,Guava,我正在写一个小的客户端库来帮助我完成一个Android项目。所以我现在在学番石榴,我有点困了 TCP服务器具有2种功能: 回答直接查询 订阅将来将被多次答复的查询 因此,我使用AbstractExecutionThreadService来侦听传入的消息。对于直接查询,我想使用ListenableFuture,对于订阅消息,则使用EventBus 问题是,要创建ListenableFutures,我必须使用ListeningExecutorService,而这正是我现在想要的。如果您看到我的代
- 回答直接查询
- 订阅将来将被多次答复的查询
AbstractExecutionThreadService
来侦听传入的消息。对于直接查询,我想使用ListenableFuture
,对于订阅消息,则使用EventBus
问题是,要创建ListenableFuture
s,我必须使用ListeningExecutorService
,而这正是我现在想要的。如果您看到我的代码,则运行
循环将处理消息,并应以某种方式解析正确的ListenableFuture
那么,我如何使test()
方法返回一个ListenableFuture
,当数据到达时,它将由run()
循环解决
公共类StratumClient扩展AbstractExecutionThreadService{
私有静态最终记录器log=LoggerFactory.getLogger(StratumClient.class);
私有最终字符串主机;
私人最终国际港口;
专用插座;
专用数据输出流到服务器;
来自服务器的私有BufferedReader;
public StratumClient(字符串主机,int端口)引发IOException{
this.host=host;
this.port=端口;
this.socket=createSocket();
}
受保护的套接字createSocket()引发IOException{
log.debug(“打开“+host+”:“+port”的套接字);
返回新的套接字(主机、端口);
}
@凌驾
受保护的void startUp()引发异常{
调试(“创建到套接字的I/O流:“+socket”);
toServer=新的DataOutputStream(socket.getOutputStream());
fromServer=new BufferedReader(新的InputStreamReader(socket.getInputStream());
}
@凌驾
受保护的无效触发器关闭(){
试一试{
socket.close();
}捕获(IOE异常){
日志错误(“无法关闭套接字”,e);
}
}
@凌驾
受保护的void run()引发异常{
字符串回复;
调试(“开始监听服务器回复”);
而((reply=fromServer.readLine())!=null){
log.debug(“从服务器获得回复:“+reply”);
//TODO处理和分派消息
}
debug(“已完成侦听服务器回复”);
}
公共ListenableFuture测试(字符串str)引发IOException{
toServer.writeBytes(str);
return null;//在此处返回ListenableFuture
}
}
谢谢
ListeningExecutorService
不是获取/创建ListenableFuture
的唯一方法。你看过吗?这可能会有帮助