当前位置: 首页 > 知识库问答 >
问题:

Java数据包处理程序线程

叶嘉颖
2023-03-14

我有一个简单的问题。我目前正在使用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个答案

邹胜泫
2023-03-14

你需要做出有根据的猜测。

我的意思是说,你应该考虑以下的服务器端设计的编程观点。

1)这个服务器是做什么的?它只是中继消息还是有处理要做?如果有需要完成的过程,处理传入消息很可能不会成为一个问题,因为过程可能是限制因素。

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

正如你所知,许多游戏服务器/消息服务器都是多服务器,它们有一个主服务器,它们将工作委托给其他服务器,如果需要,这些服务器都可以相互通信。也许这就是你需要的,这取决于你想要的程序类型。

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

 类似资料:
  • 本文向大家介绍详解Java多线程处理List数据,包括了详解Java多线程处理List数据的使用技巧和注意事项,需要的朋友参考一下 实例1: 解决问题:如何让n个线程顺序遍历含有n个元素的List集合 实例2: List多线程并发读取读取现有的list对象 实例3: 多线程分段处理List集合 场景:大数据List集合,需要对List集合中的数据同标准库中数据进行对比,生成新增,更新,取消数据 解

  • 我使用的是Spring Batch 2.1.8。释放我有一个文件,它由一些头信息和一些需要处理的记录组成。 我有一个使用面向块处理的步骤。该步骤包含ItemReader和ItemWriter的实现。ItemReader实现是线程安全的,而ItemWriter不是。 我想在处理(或写入)任何记录之前使用标题信息。在继续使用面向块的处理时,如何确保这一点? 建议的解决方案:一种解决方案可以是编写一个预

  • 问题内容: Java如何确定分配线程或进程的内核?有什么办法可以控制吗?防止两个大线程在同一内核上执行? 基本上,我要问的是有关Java中多线程如何工作或如何在Java中控制它的更多信息。 问题答案: 您不能为特定线程设置处理器关联。但是,如果将程序分为两个进程,则应该能够将这些进程分配给操作系统级别的特定处理器。 http://www.cyberciti.biz/tips/setting-pro

  • 我正在使用JBoss 5.1(EAP)。我正在使用Spring webservice(3.0.5)。对于编组,我使用JaxB。 我正在使用maven。jaxb2。用于从模式(xsd)生成pojo的插件。 当我在JBoss上部署EAR时,我得到以下错误: 我已经检查了jaxb2插件版本,并尝试使用以前的版本,假设JBoss得到了JaxB2.1.12,尝试了许多版本,但没有运气。 有什么建议吗? 谢谢

  • 对于在时间序列数据上实现PyTorch数据管道的“最佳实践”,我有点困惑。 我有一个HD5文件,我使用自定义DataLoader读取。似乎我应该返回数据样本作为一个(特征,目标)元组,每个元组的形状是(L,C),其中L是seq_len,C是通道数-即不要在数据加载器中预制批处理,只需返回一个表。 PyTorch模块似乎需要一个批处理暗淡,即。Conv1D期望(N,C,L)。 我的印象是,类将预先处

  • 我遇到了一些数据,我想用许多不同的方式对它进行排序,例如按购买最多的最便宜的产品进行排序。我想一行一行地对文档进行分组,因为每行包含另一个“项目”。我附上了一张图片供参考。我更喜欢使用Java,但如果有必要,我会学习R。我是否手动将每行编码为数组?有400个项目,如果这是唯一的方法,我可以将其分成几天。 样品