一些特殊情况下可能会由服务器向客户端发起请,本文使用netty4,展示如何由服务器向客户端发起同步请求,下面直接铺出服务器端的代码,如果需要完整实例可参考netty客户端同步请求
SimpleChatServerHandler
package com.netty.chart;
import java.util.concurrent.CountDownLatch;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.DefaultChannelGroup;
import io.netty.util.concurrent.GlobalEventExecutor;
public class SimpleChatServerHandler extends SimpleChannelInboundHandler<String>{
public static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
public CountDownLatch latch;
public int rec;
public SimpleChatServerHandler(CountDownLatch latch, int rec) {
super();
this.latch = latch;
this.rec = rec;
}
private String result;
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
Channel incoming = ctx.channel();
for(Channel channel : channels){
channel.writeAndFlush("[SERVER] - " + incoming.remoteAddress() + " 加入\n");
}
channels.add(incoming);
}
@Override
public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
Channel outcoming = ctx.channel();
for(Channel channel : channels){
channel.writeAndFlush("[SERVER] - " + outcoming.remoteAddress() + " 离开\n");
}
channels.remove(ctx.channel());
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, String string) throws Exception {
Channel incoming = ctx.channel();
if(rec == 1){
result = string;
}
for (Channel channel : channels) {
if (channel != incoming){
channel.writeAndFlush("[" + incoming.remoteAddress() + "] : " + string + "\n");
} else {