我们已经得到了它在TCP / IP已经实现了一个服务器,但我们现在有协议的要求,支持UDP为好。
发送的每个UDP数据报中包含的一切,我需要解码所以这是一个非常简单的回复和响应系统,由换行符分隔数据报数据。
对于在服务器启动如下所示的引导代码:
//SETUP UDP SERVER
DatagramChannelFactory udpFactory = new NioDatagramChannelFactory(Executors.newCachedThreadPool());
ConnectionlessBootstrap udpBootstrap = new ConnectionlessBootstrap(udpFactory);
udpBootstrap.setOption("sendBufferSize", 65536);
udpBootstrap.setOption("receiveBufferSize", 65536);
udpBootstrap.setOption("receiveBufferSizePredictorFactory", new AdaptiveReceiveBufferSizePredictorFactory());
udpBootstrap.setOption("broadcast", "true");
udpBootstrap.setPipelineFactory(new ServerPipeLineFactoryUDP());
udpBootstrap.bind(new InetSocketAddress(hostIp, 4000));
管道代码是:
class ServerPipeLineFactoryUDP implements ChannelPipelineFactory
{
private final static ExecutionHandler EXECUTION_HANDLER = new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(ScorpionFMS.THREAD_POOL_COUNT, 0, 0));
public ServerPipeLineFactoryUDP()
{
}
@Override
public ChannelPipeline getPipeline() throws Exception
{
ChannelPipeline pipeline = pipeline();
pipeline.addLast("debugup", new DebugUpstreamHandler("UDP"));
pipeline.addLast("debugdown", new DebugDownstreamHandler("UDP"));
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(256, Delimiters.lineDelimiter()));
pipeline.addLast("decoder", new UDPRequestDecoder(true));
pipeline.addLast("encoder", new StringEncoder());
pipeline.addLast("executor", EXECUTION_HANDLER);
pipeline.addLast("handler", new UDPRequestHandler(
return pipeline;
}
}
问题IM具有的每个数据包是使用这条管道的同一个实例(我希望每个数据报将使用管道的新实例),因此,所有我在处理数据包的内容存储的状态保存,下一个数据包的用途它,以及,(而对于TCP每个连接将具有其自己的信道,并且因此它的管道的自己的实例和它自己的状态)
我知道这是从阅读文档预期的行为,但反正是有强制网状重新对每个数据报的管道? 或者,我要对这个完全错误的方式?
说得简洁,我想每个数据报有管道(同TCP)的新实例