欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java socket長連接中解決read阻塞的3個辦法

 更新時間:2014年08月05日 11:31:49   投稿:junjie  
這篇文章主要介紹了java socket長連接中解決read阻塞的3個辦法,本文取了折中的一個方法,并給出代碼實例,需要的朋友可以參考下

解決的方法有3個 :

1 約定發(fā)送的數(shù)據(jù)長度,比如 http的 keepAlive 就是必須依賴這個的 Content-Length
2 設(shè)置超時的時間,根據(jù)我的經(jīng)驗,只有在Socket級別設(shè)置才有效.

復制代碼 代碼如下:
Socket socket = new Socket(host,port);
socket.setSoTimeout(100); // 如果超過100毫秒還沒有數(shù)據(jù),則拋出 SocketTimeoutException

3 讓發(fā)送端發(fā)送完數(shù)據(jù)后,關(guān)閉連接。 這個在Http的操作時很常見。

(InputStream如何判斷數(shù)據(jù)已經(jīng)讀取結(jié)束)

某些時候無法修改客戶端的情況下情況一就只有pass掉了,情況二相對來說比較適合,當阻塞后直接拋出一個異常。情況三不適合長連接,因為整個通信過程中鏈路是不能中斷的,也不能調(diào)shutdown結(jié)束。其實還有第四種方法:當讀取到某些字符就不在往下讀取了,比如讀取到byebye就break。但是這也需要改客戶端代碼。選了一種折中的辦法-設(shè)置超時:

StringBuilder sb = new StringBuilder();
try {
  client.setSoTimeout(500);
  while ((a = client.getInputStream().read(buf)) != -1) {
    sb.append(new String(buf, 0, a));
    if (a != size) {
      break;
    }
  }
} catch (Exception e) {
}
System.out.println(sb);

相關(guān)文章

  • 聊聊關(guān)于Java方法重寫的反思

    聊聊關(guān)于Java方法重寫的反思

    最近在開發(fā)中遇到一個關(guān)于Java方法重寫的一些問題,對于方法重寫的用法以及可能導致的問題產(chǎn)生了一些思考,本文用于記錄下這些想法,希望對大家也有所幫助
    2023-05-05
  • Spring?Cloud?通過?Gateway?webflux實現(xiàn)網(wǎng)關(guān)異常處理

    Spring?Cloud?通過?Gateway?webflux實現(xiàn)網(wǎng)關(guān)異常處理

    在某一個服務(wù)中出現(xiàn)異常,通過@ControllerAdvice?+?@ExceptionHandler?統(tǒng)一異常處理,即使在微服務(wù)架構(gòu)中,也可以將上述統(tǒng)一異常處理放入到公共的微服務(wù)中,這樣哪一個微服務(wù)需要,直接引入模塊,本文重點介紹Spring?Cloud?通過?Gateway?webflux實現(xiàn)網(wǎng)關(guān)異常處理,一起看看吧
    2023-11-11
  • javaweb 國際化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用

    javaweb 國際化:DateFormat,NumberFormat,MessageFormat,ResourceBu

    本文主要介紹javaWEB國際化的知識,這里整理了詳細的資料及實現(xiàn)代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • Java包裝類的緩存機制原理實例詳解

    Java包裝類的緩存機制原理實例詳解

    這篇文章主要介紹了Java包裝類的緩存機制原理實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • java實現(xiàn)TCP socket和UDP socket的實例

    java實現(xiàn)TCP socket和UDP socket的實例

    這篇文章主要介紹了本文主要介紹了java實現(xiàn)TCP socket和UDP socket的實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java觀察者設(shè)計模式(Observable和Observer)

    Java觀察者設(shè)計模式(Observable和Observer)

    這篇文章主要介紹了 Java觀察者設(shè)計模式(Observable和Observer)的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • Java?負載均衡算法作用詳細解析

    Java?負載均衡算法作用詳細解析

    這篇文章主要介紹了Java?負載均衡算法作用詳細解析,負載均衡在Java領(lǐng)域中有著廣泛深入的應(yīng)用,不管是大名鼎鼎的nginx,還是微服務(wù)治理組件如dubbo,feign等,負載均衡的算法在其中都有著實際的使用
    2022-07-07
  • 如何對quartz定時任務(wù)設(shè)置結(jié)束時間

    如何對quartz定時任務(wù)設(shè)置結(jié)束時間

    這篇文章主要介紹了如何對quartz定時任務(wù)設(shè)置結(jié)束時間問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring ApplicationListener源碼解析

    Spring ApplicationListener源碼解析

    這篇文章主要為大家介紹了Spring ApplicationListener源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • JAVA文件掃描(遞歸)的實例代碼

    JAVA文件掃描(遞歸)的實例代碼

    這篇文章主要介紹了JAVA文件掃描(遞歸)的實例代碼 ,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06

最新評論