java—使用nio开发http服务时遇到的问题

fgw7neuy  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(146)

因为我英语不好,这个问题都是谷歌翻译的。所以可能会有一些不恰当的词语。如果你看到一些不礼貌的话,请相信我,我绝对不是故意的。非常感谢。

我目前的软件设计是这样的

选择器启动读取事件时,使用以下代码读取接收到的数据

/* Create a temporary container to temporarily store the data in the current channel in it */
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024);

/* Buffer, the maximum length of each cycle read */
ByteBuffer readBuffer = ByteBuffer.allocateDirect(tcpServerConfig.getReadSize());

while (true){
    int size = channel.read(readBuffer);

    if(size < 0){
       ChannelUtil.cancel(selectionKey);
       ChannelUtil.close(channel);
       return null;
    }

    if(size == 0){
       break;
    }

    /* If the data is read, it is appended to the outputStream */
    ReadUtil.byteBufferToOutputStream(readBuffer, outputStream);
}

然后将outputstream放入队列,另一个线程将使用它。

使用此队列的逻辑如下所示

有一个线程不断地从队列中获取任务,
获取任务后,将获取outputstream,然后根据http消息结构对其进行解析
解析完成后,判断消息是否完整,如果不完整,直接执行下一个任务,如果完成,将解析后的数据传递给处理程序进行业务逻辑处理

现在的问题是

性能不是很好,tfb的测试结果只有140000 tps左右。
请相信我,这绝对不是广告,我真诚地寻求帮助。我真的很喜欢开发这个开源项目。我希望把它的表现提高到一个更高的水平,但我的个人能力确实有限。我希望大家能帮助我,给我一些设计的想法。
非常感谢你。

更具体的参考资料

总体设计在此处输入图像描述
来源codehttps://github.com/yuyenews/magician

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题