因为我英语不好,这个问题都是谷歌翻译的。所以可能会有一些不恰当的词语。如果你看到一些不礼貌的话,请相信我,我绝对不是故意的。非常感谢。
我目前的软件设计是这样的
选择器启动读取事件时,使用以下代码读取接收到的数据
/* 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
暂无答案!
目前还没有任何答案,快来回答吧!