连接客户端通道时在TCP服务器中保留数据

时间:2015-12-16 00:12:38

标签: java netty

我正在使用Netty构建TCP服务器。 有没有办法在其频道存在时保持连接的客户端的会话数据?

例如,当客户端连接到服务器时,我需要创建其类实例,并在发送消息时以不同方式重用。 类似下面的代码:

// this is called when the client connect to the server
public void channelActive(final ChannelHandlerContext ctx) {
    ctx.pipeline().get(SslHandler.class).handshakeFuture().addListener(
        new GenericFutureListener<Future<Channel>>() {
            public void operationComplete(Future<Channel> future) throws Exception {
               // I need to create the class instance when the
               // client connects to the server
               ClientData clientData = new ClientData(ctx.channel()); 
               channels.add(ctx.channel()); 
             }
        }
    );
}

// this is called when the server receives a message from the connected client
public void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
   if("update".equals(msg)){
       // then I need the retrieve the data created 
       // in the ChannelActive method.
      clientData().update(); 
   }
}

在浏览解决方案时,我找到了一些示例,其中开发人员使用缓存服务(如memcache或redis)来存储和检索与连接的客户端相关的数据。

但我希望不依赖于外部流程来解决这个问题。 有没有办法实现这个目标?关于这个问题的任何建议将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

您应该使用MyArray([(1,4)]) 继承的AttributeMap.attr(AttributeKey key)

  

存储有状态信息

     

class MyArray (OrderedDict): def __getitem__ (self, key): if not hasattr (key, '__iter__'): return MyArray({key:OrderedDict.__getitem__ (self,key)}) return MyArray((k,OrderedDict.__getitem__ (self,k)) for k in key) 允许您存储和访问与处理程序及其上下文相关的有状态信息。请参阅ChannelHandler以了解管理有状态信息的各种推荐方法。 [1]

[1] [http://netty.io/4.0/api/io/netty/channel/ChannelHandlerContext.html]