Java数据包处理程序线程

Java数据包处理程序线程,java,multithreading,sockets,netty,Java,Multithreading,Sockets,Netty,我有一个简单的问题。我目前正在使用Netty处理来自客户端的TCP和UDP数据包。我有一个单独的线程上的每个套接字侦听器,它工作得很好 我现在担心的是,当流量开始严重冲击它时,我不认为每个处理程序只有一个线程来管理消息就足够了。为每条消息生成一个新线程是否正确(我觉得不正确)?或者我应该使用像线程池这样的东西来实现这一点?如有任何建议,将不胜感激 下面是消息处理程序的一些示例代码。我编写了一些伪代码来可视化这个过程。这可能对你们也有帮助 @Override public void mes

我有一个简单的问题。我目前正在使用Netty处理来自客户端的TCP和UDP数据包。我有一个单独的线程上的每个套接字侦听器,它工作得很好

我现在担心的是,当流量开始严重冲击它时,我不认为每个处理程序只有一个线程来管理消息就足够了。为每条消息生成一个新线程是否正确(我觉得不正确)?或者我应该使用像线程池这样的东西来实现这一点?如有任何建议,将不胜感激

下面是消息处理程序的一些示例代码。我编写了一些伪代码来可视化这个过程。这可能对你们也有帮助

    @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);
}

你需要做出有根据的猜测

我的意思是说,你应该考虑以下的服务器端设计的编程观点。 1) 这个服务器做什么?它只是传递消息还是需要进行处理? 如果有需要执行的流程,则处理传入消息很可能不是一个问题,因为这些流程可能是限制因素

2) 你期望有多少“流量”?任何时候估计的服务器负载是多少? 我知道,当您构建第一台服务器时,这很难做到。但你需要知道你的目标。如果你认为全世界都会使用它,你真的需要为此做好准备。否则我建议你试着测试一下自己

现在,正如您所知,许多游戏服务器/消息服务器都是多服务器,它们有一个主服务器,并将工作委托给其他服务器,这些服务器都可以在需要时相互通信。也许这就是你所需要的,取决于你所追求的项目类型

但实际上,您应该尝试创建一个要测试的服务器。我建议使用单线程消息侦听器/数据包处理程序。如果你需要处理一些东西,就从另一个处理线程中释放出来。
真正的服务器设计原则,如“唯你所求”,只会对成千上万的用户产生完全的影响。即使如此,这在很大程度上取决于您需要在服务器上运行的进程

这将是一个游戏服务器,但我们离通过其他服务器进行通信的目标还很远。对于委托,它基本上只是通过网络进行服务调用,然后在它返回时执行承诺吗?这听起来也是一个好主意,因为它创建了委托将强制我们进入的异步进程,因此最好从getgo开始构建,不是吗?最常见、最简单的例子是登录。对于游戏服务器来说,需要进行大量的处理,因此大多数游戏都有一些专用的登录/授权系统。服务器间好友列表是另一个仅用于提供服务器间协作的服务器示例。。。或世界细分/旅游屏幕一些游戏每个区域都有自己的服务器。。。这些都是高要求的游戏,好吧,这让我对所涉及的架构有了一个想法,所以我知道在构建这个游戏时应该记住什么。谢谢你的想象。