Netty中如何使用外部服务?
How to use external services in Netty?
我刚刚开始使用 Netty 和两个外部服务实现一个 TCP 服务器:MongoDB 和 Redis。
由于这是我第一次接触 Netty,因此我需要一些建议。
我的疑问是,我是否应该为传入客户端之间的外部服务共享一个唯一的 class 实例?
例如:
关于Redis,我一般使用线程间共享的JedisPoolclass
// 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 class。
// 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 中这样做是否正确?或者,在每个连接到服务器的新客户端上,我都必须创建到服务的新连接?
如果正确,那么我应该何时何地实例化 classes?
如果没有,那么我必须为每个客户端创建一个新连接?
非常感谢。
您可以通过创建实例并将其注入 ChannelHandler 来全局使用任何 class。
我刚刚开始使用 Netty 和两个外部服务实现一个 TCP 服务器:MongoDB 和 Redis。 由于这是我第一次接触 Netty,因此我需要一些建议。
我的疑问是,我是否应该为传入客户端之间的外部服务共享一个唯一的 class 实例?
例如: 关于Redis,我一般使用线程间共享的JedisPoolclass
// 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 class。
// 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 中这样做是否正确?或者,在每个连接到服务器的新客户端上,我都必须创建到服务的新连接?
如果正确,那么我应该何时何地实例化 classes? 如果没有,那么我必须为每个客户端创建一个新连接?
非常感谢。
您可以通过创建实例并将其注入 ChannelHandler 来全局使用任何 class。