如何在Netty中使用外部服务?

时间:2015-12-10 22:09:01

标签: netty

我刚刚开始使用Netty和两个外部服务实现TCP服务器:MongoDB和Redis。 由于这是我第一次使用Netty,我需要一些建议。

我的疑问是,我应该为传入客户端之间的外部服务共享一个唯一的类实例吗?

例如: 关于Redis,我通常使用在线程之间共享的JedisPool类。

 // Example
 // main class
public class Demo{
  public void demoClass(){
    JedisPool jedisPool = new JedisPool();
    for(int i = 0; i < 999; i ++){
       DemoThread thread = new DemoThread(jedisPool, i);
       thread.run();
    }
  }
}

// thread class
public class DemoThread{
  private JedisPool jedisPool;
  private int i;
  public DemoThread(JedisPool jedis, int i){
      this.jedisPool = jedis;
      this.i = i;
   }

   public void run(){
       Jedis redisClient = jedisPool.getResource();
       //...
   }
}

按照几乎相同的例子,关于MongoDB,我通常使用一个MongoDatabase类,它在线程之间共享。

 // Example
 // main class
public class Demo{
  public void demoClass(){
    MongoClient mongoClient = new MongoClient();
    MongoDatabase mongoDatabase = mongoClient.getDatabase("example");
    for(int i = 0; i < 999; i ++){
       DemoThread thread = new DemoThread(mongoDatabase, i);
       thread.run();
    }
  }
}

// thread class
public class DemoThread{
  private MongoDatabase mongoDatabase;
  private int i;
  public DemoThread(MongoDatabase mongoDatabase, int i){
      this.mongoDatabase = mongoDatabase;
      this.i = i;
   }

   public void run(){
       MongoCollection collection = mongoDatabase.getCollection("example");
       //...
   }
}

在Netty中做同样的事情是否正确?或者,在服务器上连接的每个新客户端,我必须创建与服务的新连接?

如果它是正确的,那么我应该在何时何地实例化这些类? 如果没有,那么我必须为每个客户创建一个新的连接?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过创建实例并将其注入ChannelHandler来全局使用任何类。