@Override
 public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
   Channel channel = ctx.getChannel();
   if (!sessions.removeSession(channel.getId())) {
     Log.error("删除Session失败! sockId: " + channel.getId());
   }
 }
  private String getUtf(ChannelBuffer buffer) {
    // UTF = short + data;
    int readableBytes = buffer.readableBytes();
    if (readableBytes < 2) {
      throw new IllegalArgumentException("buffer doesn't contains utf data!");
    }

    // 只有长度 没有内容
    if (readableBytes == 2) {
      return "";
    }

    int dataLen = buffer.readUnsignedShort();
    byte[] data = new byte[dataLen];
    buffer.readBytes(data);

    try {
      return new String(data, "UTF-8");
    } catch (UnsupportedEncodingException e) {
      Log.error("解码UTF错误", e);
    }

    return null;
  }