看板 java 關於我們 聯絡資訊
最近在練習用實作 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 以內執行完畢 請問這可能是什麼部分出問題了? -- ╔═ ═╦╦═════╦═════╗ ◤◤◤ ╠╣飛鳥ももこ╠═╗ ║ ║╚═════╝ ╚═╦═╣ ║╔══════╗╔═╩═╣ █◤ ╠╣Momoko Asuka╠╝ ║ ◣◢◣◢╩╩══════╩════╝ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.72.253.42 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1576054063.A.62C.html ※ 編輯: gasbomb (211.72.253.42 臺灣), 12/11/2019 16:52:04
tw11509: 我本機跑了一下第二版,沒遇到你說的問題,client感覺不 12/12 11:14
tw11509: 出延遲 12/12 11:14
tw11509: 你可能進debug mode才能釐清原因 12/12 11:24