我刚刚开始使用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中做同样的事情是否正确?或者,在服务器上连接的每个新客户端,我必须创建与服务的新连接?
如果它是正确的,那么我应该在何时何地实例化这些类? 如果没有,那么我必须为每个客户创建一个新的连接?
非常感谢。
答案 0 :(得分:0)
您可以通过创建实例并将其注入ChannelHandler来全局使用任何类。