我有一个简短的一般问题。我目前正在使用Netty来处理来自客户端的TCP和UDP数据包。我在每个单独的线程上都有套接字监听器,它工作得很好。
我现在关注的是,当流量开始大量攻击时,我认为每个处理程序管理消息的单个线程都不够。每条消息生成一个新线程是否正确(我觉得不是)?或者我应该使用像Threadpool这样的东西?任何建议都将不胜感激。
以下是消息处理程序的一些示例代码。我写了一些伪代码来可视化这个过程。它也可以帮助你们。
@Override
public void messageReceived(ChannelHandlerContext ctx, DatagramPacket packet) {
//This will likely need made into a thread
//SocketDecoder.decode(packet.content().toString(CharsetUtil.US_ASCII));
//Handle decoded message, will return CharSequence
DatagramPacket response = Namespace.Decoder.createDatagram(packet, "hello");
ctx.writeAndFlush(response);
}
答案 0 :(得分:2)
你需要做出有根据的猜测。
我的意思是说你应该考虑以下编程观点来进行服务器端设计。
1)这台服务器做什么?它只是中继消息还是要处理? 如果存在需要完成的过程,则处理传入消息的可能性很大,因为过程可能是限制因素。
2)您期望“流量”多少?任何时候估计的服务器负载是多少? 我知道当你构建你的第一台服务器时这很难。但你需要知道你的目标。如果你认为整个世界都会使用它,你真的需要为此做好准备。否则我会建议你试试自己。
现在您知道许多游戏服务器/消息服务器都是多服务器,它们有一个主服务器,并且他们将工作委托给其他人,如果需要,他们可以互相通信。也许这就是你需要的,这取决于你所追求的程序类型。
但实际上你应该尝试创建一个服务器进行测试。我建议使用单线程消息监听器/数据包处理程序。如果你需要处理一些东西射击另一个处理线程。 真正的服务器设计原则就像你所要求的那样,只对数千名用户产生了全面的影响。即便如此,它在很大程度上取决于您在服务器上运行所需的过程。