锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浣嗗鎬殑鏄彧鏈変竴涓狹DB鑳芥甯歌鍙朆ytesMesage錛屽彟涓涓狹DB璇誨彇BytesMessage.readBytes()濮嬬粓榪斿洖-1
鍚屾牱鐨勬祴璇曠▼搴忥紝鍦╓ebLogic涓婂氨姝e父銆?br />
JBoss鎬庝箞浼?xì)鍙戦佸悓涓涓狟ytesMessage瀵硅薄鍒版墍鏈夌殑subscriber錛熸湁浜鴻В鍐寵繃鍚屾牱鐨勯棶棰樺悧錛?
google浜嗗緢闀挎椂闂達(dá)紝涔熷皾璇曚簡寰堝鏂規(guī)硶錛屼技涔庢病浠涔堝ソ鐨勫姙娉曘備竴縐嶆柟娉曟槸閬垮厤浣跨敤BytesMessage, 榪樻湁涓縐嶆柟娉曞氨鏄嬌鐢ㄥ弽灝勶紝鐩存帴澶嶅埗JBoss鐨凚ytesMessage瀹炵幇銆?br />
public void onMessage(Message msg) {
BytesMessageProxy msgProxy = (BytesMessageProxy)msg;
Class clazz = MessageProxy.class;
Field field = clazz.getDeclaredField("message");
field.setAccessible(true);
JBossMessage rawMsg = (JBossMessage)field.get(msgProxy);
BytesMessage newMsg = (BytesMessage)rawMsg.doCopy();
// read data from newMsg
}
]]>
JVM鍐呴儴涓昏鍖呮嫭鍐呭瓨綆$悊鍜?/span>Class Loader錛堢被鍔犺澆鍣級(jí)涓や釜閮ㄥ垎銆傜啛鎮(zhèn)変簡鍐呭瓨綆$悊錛屾垜浠氨浼?xì)娓呮绋嬪簭鍦ㄥ唴瀛樹腑鏄庝箞鍒嗛厤鍜屾墽琛岀殑錛屽氨鑳借В鍐蟲墍鏈夊拰瀵硅薄鐩稿叧鐨勯棶棰橈紙姣斿Memory Leak錛夈傜悊瑙d簡Class Loader錛屽氨鑳借В鍐蟲墍鏈夌被鎵句笉鍒幫紙姣斿閬囧埌NoClassDefFoundError鎴?/span>ClassNotFoundException錛夋垨閰嶇疆鏂囦歡鎵句笉鍒伴棶棰樸?/span>
榪欐鎴戜滑鍙璁?/span>JVM鐨?/span>Class Loader錛屼笅嬈″啀璁ㄨJVM鐨勫唴瀛樼鐞嗐?/span>
Class Loader鐨勪富瑕佷綔鐢ㄥ氨鏄礋璐f煡鎵劇被騫跺皢鍏跺姞杞藉埌鍐呭瓨涓傛湁瓚g殑鏄紝Java涓殑Class Loader涔熸槸鐢?/span>Java鎵鍐欙紝灝卞拰鏅氱殑class涓鏍楓傝繖灝變駭鐢熶簡涓涓槸楦$敓铔嬭繕鏄泲鐢熼浮鐨勯棶棰橈紝鍒板簳絎竴涓?/span>class鐢辮皝鏉ュ姞杞藉憿錛熸垜浠◢鍚庝細(xì)鏉ヨ璁鴻繖涓棶棰樸?/span>
鍏堟潵鐪嬩竴涓?/span>Class Loader鎵鍏鋒湁鐨勭壒鐐廣?/span>
1. 緇ф壙鍏崇郴
铏界劧Class Loader涔熸槸涓涓?/span>Java class錛屼絾榪欓噷鐨勭戶鎵夸笉鏄寚瀹氫箟class鏃朵嬌鐢ㄧ殑extends鍏抽敭瀛楁潵瀹炵幇鐨勭戶鎵匡紝鑰屾槸鎸囩敱灞炴ф潵緇存寔鐨勭戶鎵垮叧緋匯傚嵆閫氳繃Class Loader鐨勬瀯閫犳柟娉曟垨鍏跺畠鏂規(guī)硶鏄懼紡鐨勮緗竴涓埗Class Loader銆?/span>
2. 浠g悊鍏崇郴
姣忎竴涓?/span>Class Loader鍦ㄦ帴鍒拌姹傚幓鍔犺澆涓涓被涔嬪墠錛堥粯璁わ紝璁塊棶涓涓被鐨勬椂鍊欙紝灝變細(xì)鐢卞姞杞藉綋鍓嶇被鐨?/span>Class Loader鍘誨姞杞借璁塊棶鐨勭被錛夛紝瀹冧細(xì)棣栧厛璇鋒眰瀹冪殑鐖?/span>Class Loader鏉ュ皾璇曞姞杞斤紝渚濇寰涓婏紝濡傛灉鐖?/span>Class Loader鍔犺澆鎴愬姛錛屽垯鐩存帴榪斿洖錛屽瓙Class Loader涓嶅啀鏌ユ壘銆?/span>
鍚﹀垯渚濇寰涓嬫煡鎵懼茍鍔犺澆銆傚鏋滅洿鍒拌璇鋒眰鐨?/span>Class Loader涔熸病鏈夋壘鍒拌鍔犺澆鐨勭被錛屽垯浼?xì)鍑虹?/span>NoClassDefFoundError鎴?/span>ClassNotFoundException
褰撶劧濡傛灉琚姹傜殑綾誨凡緇忓姞杞藉埌浜嗗唴瀛樹腑錛屽氨涓嶄細(xì)瑙﹀彂榪欎釜鏌ユ壘榪囩▼浜嗭紝鑰屾槸鐩存帴榪斿洖宸茬粡鍔犺澆鐨勭被銆?/span>
鎴戜滑鏉ョ湅涓涓緥瀛愶紝鍋囪鏈夊浘1涓殑Class Loader灞傛錛?/span>
濡傛灉鎴戜滑璇鋒眰Class Loader E鍘誨姞杞?/span>Test.class錛岄鍏堝畠浼?xì)璇锋眰鐖?/span>Class Loader D鍘誨皾璇曞姞杞姐傚悓鏍?/span>Class Loader D浼?xì)鍏堣h眰瀹冪殑鐖?/span>Class Loader C鍘誨皾璇曞姞杞?/span>Test.class銆傚綋鐒惰繖閲?/span>Class Loader C鎵句笉鍒?/span>Test.class錛屼簬鏄漿鍥炵敱Class Loader D鍘誨姞杞姐傛渶緇?/span>Class Loader D鎴愬姛鎵懼埌浜?/span>D:"Test.class錛屽茍灝嗗叾鍔犺澆鍒板唴瀛樹腑銆?/span>
鍚屾牱錛屽鏋滄垜浠姹?/span>Class Loader F鍘誨姞杞?/span>Test3.class銆?/span>Class Loader C鍜?/span>Class Loader D鍦ㄥ悇鑷殑鎼滅儲(chǔ)鑼冨洿鍐呴兘鎵句笉鍒?/span>Test3.class銆傛渶緇堜細(xì)鐢?/span>Class Loader F鑷繁鍔犺澆F:"Test3.class鍒板唴瀛樹腑銆?/span>
濡傛灉鎴戜滑璇鋒眰Class Loader D鍘誨姞杞?/span>Test3.class錛屾渶緇堝氨浼?xì)鍑虹?/span>NoClassDefFoundError鎴?/span>ClassNotFoundException
3. 鍚屼竴緇ф壙閾懼彲瑙佹?/span>
鍦ㄥ悓涓涓?/span>Class Loader瀵硅薄鐨勭戶鎵塊摼涓紝涓嬮潰琚姞杞界殑綾誨彲浠ヨ闂笂闈㈣鍔犺澆鐨勭被錛屽弽涔嬪垯涓嶅彲浠ャ?/span>
鍚屾牱浠ュ浘1涓轟緥錛?/span>Test4.class鍙互璁塊棶鍒?/span>D:"Test.class鍜?/span>C:"Test2.class
鑰屽鏋?/span>D:"Test.class鎴?/span>C:"Test2.class灝濊瘯璁塊棶Test4.class錛屽氨浼?xì)鍑虹?/span>NoClassDefFoundError鎴?/span>ClassNotFoundException
4. 澶氫釜緇ф壙閾句笉鍙鎬?/span>
澶氫釜緇ф壙閾句箣闂村郊姝ょ湅涓嶅埌瀵規(guī)柟錛屼笉鑳界浉浜掕闂?/span>
榪樹互鍥?/span>1涓轟緥錛屽鏋?/span>Test4.class璁塊棶Test3.class錛屾垨鍙嶈繃鏉?/span>Test3.class璁塊棶Test4.class錛岄兘浼?xì)寮曡?/span>NoClassDefFoundError鎴?/span>ClassNotFoundException
鐞嗚В浜?/span>Class Loader鎵鍏鋒湁鐨勭壒鐐癸紝鎴戜滑鏉ョ湅鐪?/span>JDK涓兘棰勭疆浜嗗摢浜?/span>Class Loader銆備篃鏄?/span>JVM鍚姩鏃墮粯璁ゅ垱寤虹殑Class Loader銆傚鍥?/span>2
閫氳繃鍥?/span>2錛屾垜浠彲浠ョ湅鍒?/span>Bootstrap Class Loader鏄?/span>JVM涓殑紲栧厛Class Loader銆傚畠鏄?/span>JDK涓敮涓涓涓敱C++鎵鍐欑殑Class Loader錛屽畠璐熻矗鍔犺澆JDK鐨勬牳蹇冪被搴?/span>(rt.jar)浠ュ強(qiáng)鍙﹀涓や釜鐢?/span>Java鎵鍐欑殑Class Loader錛?/span>Ext Class Loader鍜?/span>App Class Loader錛夈備箣鍚庡氨鍔熸垚韜錛岃漿鐢?/span>Ext Class Loader鍜?/span>App Class Loader鍔犺澆鎵鏈夊簲鐢ㄤ腑鐢ㄥ埌鐨勭被銆?/span>
涓鑸垜浠殑搴旂敤閮芥槸閫氳繃璁劇疆CLASSPATH錛屾渶緇堢敱App Class Loader鏉ュ姞杞姐傛牴鎹?/span>Class Loader鐨勭戶鎵垮叧緋伙紝鎴戜滑搴旂敤涓殑綾誨彲浠ヨ闂?/span>JDK鐨勬牳蹇冪被搴撱傚弽涔嬪垯浼?xì)鍑洪敊銆?/span>
鎴戜滑鍐嶆潵鐪嬬湅WebLogic涓?/span>Class Loader鐨勫眰嬈″叧緋伙紙濡傚浘4錛夈傚鏋滈渶瑕侊紝澶у鍙互鍙傝冧竴涓?/span>WebLogic涓?/span>WAR鍜?/span>EAR鐨勬枃浠剁粨鏋勶紙濡傚浘3錛?/span>
WLS涓嚜瀹氫箟浜嗗緢澶氭柊鐨?/span>Class Loader錛屽綋鐒朵粬浠殑紲栧厛Class Loader閮芥槸JDK涓殑App (or System) Class Loader銆傛垜浠潵鐪嬩竴涓嬫瘡涓?/span>Class Loader鐨勮亴璐c?/span>
1. JDK App (or System) Class Loader
l 璐熻矗鍔犺澆WLS鍚姩鑴氭湰涓?/span>CLASSPATH涓緗殑綾?/span>
l 鎵鏈夌殑綾婚兘浼?xì)鏈鍏堢敱瀹冨皾璇曞姞杞?/span>
l 鍥犱負(fù)CLASSPATH鐨勫煎湪榪愯鏈熶笉鍏佽淇敼錛屾墍浠ョ敱璇?/span>Class Loader鍔犺澆鐨勭被鍦ㄨ繍琛屾湡涓嶈兘琚姩鎬佸嵏杞斤紙鏇挎崲錛?/span>
2. EJB Class Loader (1)
l 璐熻矗鍔犺澆鍗曠嫭鐨?/span>EJB jar閲岀殑綾匯?/span>
l 涓嶅悓鐨?/span>EJB jar鏂囦歡浼?xì)琚笉鍚屽疄渚嬬?/span>Class Loader鍔犺澆錛屽洜姝?/span>EJB jar褰兼涔嬮棿浜掔浉鐪嬩笉鍒板鏂?/span>
3. WAR Class Loader (1)
l 璐熻矗鍔犺澆鍗曠嫭鐨?/span>WAR閲岀殑綾?/span>
l 涓嶅悓鐨?/span>WAR鏂囦歡浼?xì)琚笉鍚屽疄渚嬬?/span>Class Loader鍔犺澆錛屽洜姝?/span>WAR褰兼涔嬮棿浜掔浉鐪嬩笉鍒板鏂?/span>
4. EAR Class Loader
l 璐熻矗鍔犺澆EAR閲岄潰鐨?/span>APP-INF涓嬬殑綾?/span>
l 涓嶅悓鐨?/span>EAR鏂囦歡浼?xì)琚笉鍚屽疄渚嬬?/span>EAR Class Loader鍔犺澆錛屽洜姝?/span>EAR褰兼涔嬮棿浜掔浉鐪嬩笉鍒板鏂?/span>
l 瀹冧笅闈㈡湁涓涓?/span>EJB Class Loader (2) 瀹炰緥,璐熻矗鍔犺澆EAR閲岄潰鎵鏈夌殑EJB jar銆傚洜姝わ紝EAR涓殑EJB褰兼涔嬮棿鍙互鐪嬪埌瀵規(guī)柟
l EJB Class Loader (2) 涓嬫湁澶氫釜WAR Class Loader (2) 瀹炰緥銆傛瘡涓疄渚嬭礋璐e姞杞?/span>EAR閲岄潰鐨勪竴涓?/span>WAR銆傛墍浠ワ紝EAR涓殑WAR褰兼涔嬮棿鐪嬩笉鍒板鏂?/span>
l 鏍規(guī)嵁緇ф壙閾捐鍒欙紝WAR鍙互鐪嬪埌鎵鏈夌殑EJB鍙?/span>APP-INF涓嬬殑鎵鏈夌被銆?/span> EJB鍙互鐪嬪埌APP-INF涓嬬殑鎵鏈夌被錛屼絾鍙嶄箣鍒欎笉鍙互
Class Loader铏界劧縐頒負(fù)綾誨姞杞藉櫒錛屼絾騫朵笉鎰忓懗鐫鍙兘鐢ㄦ潵鍔犺澆Class錛屾垜浠繕鍙互鍒╃敤瀹冩潵鏌ユ壘鍥劇墖鍜岄厤緗枃浠剁瓑璧勬簮銆傛瘮濡傦紝鎴戜滑緇忓父浣跨敤getClass().getResourceAsStream(name)鏉ユ煡鎵鵑厤緗枃浠躲傚悓鏍鳳紝鏌ユ壘鍏跺畠璧勬簮鏂囦歡鐨勬柟寮忓拰涓婇潰涓鏍鳳紝涔熶細(xì)鍏堣姹傜埗Class Loader鏉ヨ礋璐f煡鎵俱?/span>
榪欓噷錛屾垜浠彧綆鍗曚粙緇嶄簡Class Loader瀵逛簬綾葷殑鏌ユ壘錛岃屽叧浜?/span>Class Loader鐨勫叿浣撳姞杞姐佹牎楠屽拰鍒濆鍖栫殑榪囩▼錛屾劅鍏磋叮鐨勬湅鍙嬪彲浠ュ弬鑰冦婃繁鍏?/span>Java铏氭嫙鏈恒?/span>
"Thread-1" prio=6 tid=0x00c70bd8 nid=0x914 runnable [0x02ebf000..0x02ebfc68]
at java.util.HashMap.put(HashMap.java:420)
at TestLock$2.run(TestLock.java:20)
"Thread-0" prio=6 tid=0x00c70a50 nid=0x578 runnable [0x02e7f000..0x02e7fb68]
at java.util.HashMap.put(HashMap.java:420)
at TestLock$1.run(TestLock.java:11)
Socket ack鏄寚褰?/span>socket鎺ユ敹鍒版暟鎹箣鍚庯紝鍙戦佷竴涓?/span>ack瀛楃涓?/span>(姣斿$ACK)緇?/span>socket鍙戦佹柟銆傝繖鏍鳳紝socket鍙戦佹柟鍙互鏍規(guī)嵁鏄惁鏀跺埌浜?/span>ack鍒ゆ柇瀵規(guī)柟鏄惁鏀跺埌浜嗘暟鎹?/span>
Socket ack鏄樉紺虹殑鍦ㄥ簲鐢ㄧ▼搴忎腑鍔犲叆鐨勪竴縐嶉氳鍗忚銆傚鏋滀笉浣跨敤ack錛屽湪socket閫氳涓紝鍙兘浼?xì)涓㈠け鏁版嵁銆?/span>
姣斿錛?/span>socket client瑕佽繛緇殑緇?/span>socket server鍙戦?/span>100鏉℃秷鎭傚鏋滄垜浠湪server鏀跺埌絎?/span>50鏉℃秷鎭殑鏃跺欙紝寮鴻kill浜?/span>server銆傞偅涔堟煡璇?/span>client绔彂閫佺殑log錛屽彲鑳?/span>client绔垚鍔熷彂閫佷簡51鏉°傚彧鏈夊綋client绔彂閫佺52鏉℃秷鎭殑鏃跺欐墠閬囧埌寮傚父銆傝繖鏍風(fēng)51鏉℃秷鎭氨涓㈠け浜嗐?/span>
鎵浠ヤ負(fù)浜嗙‘淇濇暟鎹紶杈撶殑鍑嗙‘鎬э紝鎴戜滑鍙互寮曞叆ack鍗忚銆傛湁鏃舵垜浠笉浠呰紜繚server涓嶄絾鏀跺埌浜嗘暟鎹紝鑰屼笖榪樿淇濊瘉server鎴愬姛澶勭悊浜嗘暟鎹傝繖鏃訛紝鍙互絳?/span>server鎴愬姛澶勭悊瀹屾暟鎹箣鍚庯紝鍐嶇粰client鍙?/span>ack銆?/span>
Socket榪炴帴鍍忔暟鎹簱榪炴帴涓鏍鳳紝灞炰簬閲嶉噺鍨嬭祫婧愩傚鏋滄垜浠綣佺殑鍒涘緩socket銆佸彂閫?/span>/鎺ユ敹鏁版嵁銆佸叧闂?/span>socket錛岄偅涔堜細(xì)鏈夊緢澶т竴閮ㄥ垎鏃墮棿嫻垂鍦?/span>socket鐨勫垱寤哄拰鍏抽棴涓娿?/span>
鎵浠ワ紝濡傛灉鎴戜滑緇忓父闇瑕佷笌鍚屼竴涓?/span>socket鍦板潃鍙戦?/span>/鎺ユ敹鏁版嵁鏃訛紝搴旇鑰冭檻鍙垱寤轟竴嬈?/span>socket錛岀劧鍚庝竴鐩翠嬌鐢ㄨ繖涓?/span>socket瀵硅薄鍙戦?/span>/鎺ユ敹鏁版嵁銆?/span>
閫氬父錛屾垜浠細(xì)璁劇疆socket鐨?/span>receive timeout銆傝繖鏍鳳紝濡傛灉鎴戜滑涓鐩存墦寮鐫socket (keep alive)錛?/span> 鑰屽緢闀挎椂闂村張娌℃湁鏁版嵁閫氳錛?/span>socket鎺ユ敹鏂瑰氨浼?/span>timeout錛屾渶緇堝鑷存墦寮鐨勮繛鎺ュ潖鎺夈?/span>
濡傛灉寰堥暱鏃墮棿娌℃湁鏁版嵁閫氳錛岄槻鐏鎴栦唬鐞嗘湇鍔″櫒涔熷彲鑳戒細(xì)鍏抽棴鎵撳紑鐨?/span>socket榪炴帴銆?/span>
鎵浠ヤ負(fù)浜嗕繚璇佹墦寮鐨?/span>socket榪炴帴涓鐩村彲鐢紝濡傛灉涓孌墊椂闂存病鏈夋暟鎹繘琛岄氳錛堟垨鎸囧畾涓涓椂闂撮棿闅旓級(jí)錛屾垜浠彲浠ユ樉紺虹殑鍙戦佷竴涓?/span>heartbeat娑堟伅(姣斿: $HRT)緇欏鏂癸紝浠庤屼繚璇佽繛鎺ヤ笉浼?xì)琚紓甯稿叧闂?/span>
姣忎竴涓猻ocket瀵硅薄浼?xì)鎸佹湁涓涓猻ocket descriptor (鍏跺疄灝辨槸file descriptor)錛屾搷浣滅郴緇熷浜巗ocket descriptor鏈変竴涓渶澶ч檺鍒?/span>銆傚洜姝ゅ綋socket涓嶅啀浣跨敤鏃訛紝涓瀹氳璁板緱鍏抽棴錛屽嵆浣?/span>socket榪炴帴澶辮觸鎴栧嚭鐜板紓甯革紝鍙socket瀵硅薄涓嶄負(fù)null錛屼竴瀹氳璁板緱鍏抽棴銆?/span>
涓嬮潰鍥炬樉紺轟簡錛屽綋socket鍏抽棴鏃訛紝socket鐨勭姸鎬佸彉鍖?/span>(socket鐘舵佸彲浠ラ氳繃netstat鍛戒護(hù)鏌ョ湅)銆傛洿璇︾粏鐨勮В閲婏紝鍙互google涓涓嬨?br />
褰撲富鍔ㄤ竴鏂硅皟鐢?/span>close(鍏堣皟鐢?/span>close)鏃剁殑鐘舵佸彉鍖?/span>:
ESTABLISHED -> FIN_WAIT_1-> FIN_WAIT_2 -> TIME_WAIT -> CLOSED
褰撹鍔ㄤ竴鏂硅皟鐢?/span>close(鍚庤皟鐢?/span>close)鏃剁殑鐘舵佸彉鍖?/span>:
ESTABLISHED -> CLOSE_WAIT -> LAST_ACK -> CLOSED
閫氬父錛?/span>TIME_WAIT 鏄甯哥姸鎬侊紝榪囦竴孌墊椂闂?/span>(2MSL, 1鍒?/span>4鍒嗛挓)灝變細(xì)鑷姩娑堝け.
鎴戜滑闇瑕佺壒鍒敞鎰?/span>CLOSE_WAIT 鐘舵侊細(xì)
1錛?span style="font: 7pt 'Times New Roman'"> 濡傛灉寰堥暱鏃墮棿鎵嶆秷澶憋紝琛ㄦ槑socket server澶勭悊澶參錛屽緢澶?/span>client宸茬粡榪炴帴鍒?/span>server錛屽彂閫佸畬鏁版嵁騫?/span>close浜嗐?/span>
2錛?span style="font: 7pt 'Times New Roman'"> 濡傛灉涓鐩翠篃涓嶆秷澶憋紝琛ㄦ槑鏈?/span>socket娌℃湁姝e父close (瀵規(guī)柟宸茬粡close浜?/span>)
褰?/span>socket涓誨姩璋冪敤close鐨勬椂鍊欙紝浠庝笂闈㈠彲浠ョ煡閬擄紝瀹冩渶緇堜細(xì)榪涘叆TIME_WAIT 鐘舵侊紝闇瑕佽繃1鍒?/span>4鍒嗛挓錛屾墠鑳藉畬鍏?/span>close銆?/span>
褰?/span>socket澶勪簬TIME_WAIT 鐘舵佹椂錛屽畠浠嶇劧鍗犵敤姝e湪浣跨敤鐨?/span>IP/PORT銆傝繖鏍鳳紝濡傛灉鎴戜滑鐨勭▼搴?/span>(姣斿socket server)浣跨敤浜嗕竴涓浐瀹氱殑IP/PORT錛屽綋socket澶勪簬TIME_WAIT 鐘舵佹椂錛岀▼搴忓皢涓嶈兘绔嬪嵆閲嶅惎錛屼細(xì)鍑虹幇绔彛鍗犵敤閿欒銆?/span>
Socket鎻愪緵浜嗕竴涓?/span>setReuseAddress()鏂規(guī)硶錛屽彲浠ヨ緗綋socket澶勪簬TIME_WAIT 鐘舵佹椂錛屾槸鍚﹀厑璁稿叾瀹冭繘紼嬬粦瀹氳繖涓鍙c?/span>
濡傛灉鎴戜滑姝e湪寮鍙?/span>socket server錛屼竴瀹氳璁板緱璋冪敤ServerSocket.setReuseAddress(true).
Client socket涔熸湁榪欎釜鏂規(guī)硶錛岃屼笖鏈夋椂鍙兘闇瑕佹寚鏄?/span>client榪炴帴server鏃舵墍浣跨敤鐨勬湰鍦?/span>IP/PORT(涓鑸笉鐢ㄦ寚鏄庯紝緋葷粺浼?xì)闅忔満閫夋嫨涓涓?/span>PORT)銆備絾瀹為檯嫻嬭瘯錛屽湪client socket涓婅緗繖涓柟娉曞湪Windows鍜?/span>Solaris涓嬪茍涓嶈搗浣滅敤銆傚綋socket澶勪簬TIME_WAIT 鐘舵佹椂錛岄噸鍚?/span>client浠嶇劧鍑虹幇绔彛鍗犵敤閿欒銆備笂緗戞悳绱簡寰堥暱鏃墮棿錛屽緢澶氫漢閮界鍒頒簡榪欎釜闂錛屽彲鑳芥槸鎿嶄綔緋葷粺搴曞眰socket瀹炵幇闂銆傚洜涓烘祴璇曚嬌鐢?/span>C璇█寮鍙戠殑socket client錛屽悓鏍蜂篃鏈夎繖涓敊璇傛湁浜鴻LINUX涓嬪ソ鐢紝榪樻湁灝辨槸鍙互灝濊瘯淇敼tcp_time_wait_interval鏉ュ噺灝?/span>TIME_WAIT絳夊緟鏃墮棿
鍐?/span>Socket紼嬪簭鐨勬椂鍊欓渶瑕佹敞鎰忚緗笅闈㈢殑timeout錛岄伩鍏嶅鏂規(guī)病鏈夊搷搴旂殑鏃跺欙紝瀵艱嚧Socket紼嬪簭鎸傝搗鎴栫瓑寰呮椂闂磋繃闀?/span>
Accept timeout 浠呭ServerSocket鏈夌敤銆?/span>ServerSocket 浣跨敤accept()鏂規(guī)硶鏉ョ洃鍚鎴風(fēng)Socket鐨勮繛鎺ャ?/span>
榛樿錛?/span>ServerSocket.accept() 鏂規(guī)硶浼?xì)涓鐩撮樆濉炵洿鍒版湁瀹㈡埛绔潵榪炴帴銆傞氬父錛屾垜浠笉闇瑕佽緗?/span>accept timeout.
浣嗘湁鏃跺欑壒孌婃儏鍐碉紝榪樻槸瑕佽冭檻璁劇疆accept timeout.
姣斿: 紼嬪簭A緇欑▼搴?/span>B鍙戜簡涓涓?/span>JMS娑堟伅錛岀劧鍚庣▼搴?/span>A鍚姩涓涓?/span>Socket Server錛屾兂閫氳繃socket絳夊緟鎺ユ敹紼嬪簭B鐨勮繑鍥炴秷鎭傚鏋滀笉璁劇疆accept timeout, 騫朵笖紼嬪簭B鍥犱負(fù)鏌愪簺鍘熷洜涓鐩翠笉鑳借繛鎺?/span>Socket Server錛屾渶緇堜細(xì)瀵艱嚧紼嬪簭A鎸傝搗銆?/span>
Accept Timeout鍙互榪欐牱璁劇疆錛?/span>
ServerSocket serverSocket = new ServerSocket(5555);
serverSocket.setSoTimeout(5000); // in milliseconds
while (true) {
Socket socket = serverSocket.accept();
…
}
褰?/span>Client绔繛鎺?/span>Server绔殑鏃跺欙紝鍙互鎸囧畾Connect Timeout
濡傛灉娌℃湁鎸囧畾錛屼細(xì)浣跨敤鎿嶄綔緋葷粺鐨勯粯璁ゅ?/span>:
OS |
Default TCP timeout |
BSD |
75 seconds |
Linux |
189 seconds |
Solaris |
225 seconds |
Windows XP |
21 seconds |
Connect Timeout鍙互榪欐牱璁劇疆錛?/span>
SocketAddress socketAddress = new InetSocketAddress(host, port);
socket = new Socket();
socket.connect(socketAddress, connectTimeout);
褰?/span>socket浠庡彟涓鏂規(guī)帴鏀舵暟鎹椂錛屽彲浠ヨ緗?/span>Receive Timeout
榛樿娌℃湁timeout錛?/span>socket浼?xì)涓鐩撮樆濉炵洿鍒版湁鏁版嵁鍙鍙栥?/span>
Receive Timeout鍙互榪欐牱璁劇疆錛?/span>
Socket socket = new Socket(host, port);
socket.setSoTimeout(timeout);
Send Timeout鏄?/span>socket緇欏彟涓鏂瑰彂閫佹暟鎹椂浣跨敤鐨勩?/span>
涓嶈繃Java閲屾病鏈夊姙娉曡緗?/span>Send Timeout.
褰撶劧錛?/span>socket鍙戦佹暟鎹殑鏃跺欙紝浼?xì)棣栧厛鍙戦佸埌鏈満OS鐨勪竴涓?/span>buffer鍐呫備竴鑸彧瑕佷竴嬈″彂閫佺殑鏁版嵁涓嶆槸寰堝ぇ錛屽嵆浣垮鏂規(guī)寕璧鋒垨鏆傛椂涓嶈兘鎺ユ敹鏁版嵁錛屼篃涓嶄細(xì)瀵艱嚧鍙戦佹柟鎸傝搗銆?/span>