netty 调用channel的writeAndFlush方法后如果顺序获取客户端的响应

心_行 发布于 2016/08/19 16:41
阅读 7K+
收藏 0

【DevOps必读】产品经理与程序员之间如何破局?>>>

ObjectEchoServer.list.get(0)
这里获取到一个客户端连接channel,发送数据后,我想获取这次发送后的客户端响应信息,这个该怎么做?


加载中
0
爱生活-爱美女
爱生活-爱美女
定义消息id 服务端发送带上消息id  客户端返回数据带上消息id
0
心_行
心_行

引用来自“279467439”的评论

定义消息id 服务端发送带上消息id  客户端返回数据带上消息id
但是我想在发送消息后的下面的代码就能够获取到客户端的回应
0
爱生活-爱美女
爱生活-爱美女

引用来自“279467439”的评论

定义消息id 服务端发送带上消息id  客户端返回数据带上消息id

引用来自“心_行”的评论

但是我想在发送消息后的下面的代码就能够获取到客户端的回应
那就 while(true) 阻塞等待~
0
心_行
心_行

引用来自“279467439”的评论

定义消息id 服务端发送带上消息id  客户端返回数据带上消息id

引用来自“心_行”的评论

但是我想在发送消息后的下面的代码就能够获取到客户端的回应

引用来自“279467439”的评论

那就 while(true) 阻塞等待~
还有其他方式没?
0
alexqdjay
alexqdjay
netty并不推荐这里做阻塞耗时的操作!而且客户端返回处理也不一定还是在这个线程上
0
许雪里
许雪里
你可以看看我的项目,xxl-rpc,其中通讯这块,分别使用netty,mina两种方式实现了你所说的这种需求。
0
xiaoyaoweizi
xiaoyaoweizi

我也碰到netty服务器发送消息给客户端的响应问题,我这边没办法做到同步。不知道题主解决了没?分享一下,谢谢了。

xiaoyaoweizi
xiaoyaoweizi
回复 @心_行 : 空循环是什么意思呀?由服务端发送数据,只是把数据写入socket的缓存区里,netty的监听接口判断是否成功写入缓冲区,没办法判断该数据成功发送到客户端。除非定义数据ID,客户端收到数据,返回一个带有ID的响应。所以我不知道有没有其他办法能够判断是否成功发送到客户端?
心_行
心_行
最后还是用的空循环
0
sixliu
sixliu

下面是我基于netty实现rpc的代码:

@Override
    protected void channelRead0(ChannelHandlerContext ctx, RpcMsg msg) throws Exception {
        if (msg instanceof RpcResponse) {
            RpcResponse rpcResponse = (RpcResponse) msg;
            WrapperFuture wrapperRPCRequest = rpcCilent.takeWrapperFuture(rpcResponse.getId());
            if (null != wrapperRPCRequest) {
                wrapperRPCRequest.onComplete(rpcResponse, System.currentTimeMillis());
                log.info("client received rpcResponse from rpcRequest[" + wrapperRPCRequest.getRPCRequest().toString()
                        + "]");
            }
        } else {
            log.error("ClientHandler messageReceived type not support: class=" + msg.getClass());
        }
    }

 

 

0
很激动

使用wait和notify

返回顶部
顶部