[问题] AsynchronousSocketChannel 异常缓慢

楼主: gasbomb (虚空雷神兽)   2019-12-11 16:47:39
最近在练习用实作 telnet 聊天室
ServerSocket 因为有太吃资源的问题所以改用 AsynchronousServerSocketChannel
但是用 aio 处理封包太长, 一次收到复数请求时
出现了奇怪的延迟状况
这是正常的版本
https://pastebin.com/Q8Mwf0XU
接到 client 的输入之后直接 write 回去
localhost 跑起来完全感觉不到延迟
但是考虑到要是 client 一次输入了超过 ByteBuffer.allowcate() 的大小字会断掉
所以用了 ByteArrayOutputStream 来接资料
没遇到 \n 就一直接下去, 遇到 \n 就断开
这是第二版
https://pastebin.com/dsT3sQAV
但是诡异的事情发生了, 第二版的程式运作非常良好, 一切行为都在我的预想之中
但是反应时间变得超级久, client 端 enter 按下去大概要等 300ms 左右才会收到回应
可是我在方法头尾加 System.currentTimeMillis() 去算执行时间
两个版本平均都在 4ms 以内执行完毕
请问这可能是什么部分出问题了?
作者: tw11509 (John-117)   2019-12-12 11:14:00
我本机跑了一下第二版,没遇到你说的问题,client感觉不出延迟你可能进debug mode才能厘清原因

Links booklink

Contact Us: admin [ a t ] ucptt.com