[問題] 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