作者回复: 代码结构很清晰,值得大家学习。
优化的建议:可以采用专用序列化方式,另外,你在做测试的时候有没有关闭控制台的打印输出?这个对性能的影响是很大的。
作者回复: 赞分享代码的同学👍👍👍
作者回复: 同学当然是你最快呀!😏
作者回复: 可以参考一下加餐这节课中的序列化代码。
作者回复: 是这样的。
作者回复: 需要注意的是,在OSI七层网络协议栈中,tcp协议是四层(传输层)协议,而我们设计的传输协议都是七层(应用层)协议,下层协议对上层来说是透明的。
通俗的说,tcp包的长度和我们协议中一条消息的长度是完全没有关系的,一个tcp包可能包含n条完整的消息,也可能包含半条消息,或者前后2个半条消息加上中间n条完整的消息,这都是不一定的。
作者回复: 跟语言关系不大,其实各种编程语言背后的实现原理都是差不多的。一般的大厂的架构师职位对语言也没有强要求,而且很多架构师都是掌握多门编程语言的。
作者回复: 是需要等待的,如果你使用Netty,这个问题Netty会帮你处理好。
作者回复: 你需要了解,协议是分层的,就像我们发快递,我发给你的可能是个手机,对于快递小哥来说,这就是个小包裹,他不关心里面是什么,总之我保证给你把包裹安全的送到站点儿就行了。包裹到了站点儿会分拣装箱,然后用小货车运到机场,对于小货车司机来说,它也不关心车里装的是什么,只要把车安全开到机场就行了。
对于协议来说已是这样在发送的时候一层一层的封装,然后接收的时候再一层一层解封,对于每一层协议来说,他是不知道底层是什么协议的,也不知道上层协议是如何封装的(送件的快递小哥不知道也不关心这个件是怎么到配送站的,也不知道包裹里到底装的啥),只在自己的协议层完成处理即可。
作者回复: 不一定非得用netty,使用的语言也不是只能用Java,我在后面《加餐 | JMQ的Broker是如何异步处理消息的?》这节课中,对这个作业,给出了一个用Golang的参考实现,你可以看一下。
作者回复: 👍👍👍
作者回复: 就我们这个题来说,不可以的。