2010-09-22 87 views
0

我不顧一切地在這一個一定的幫助。TCP套接字連接超時與交易量

我們越來越問題時,消息的體積爲通過HSM卡驗證在不同的服務器上的TCP套接字連接發送。

這是我們針對容量測試所測試的結果: 我們以15 trans/sec的速度處理3個30,000個事務處理,並在第3個處理塊開始拒絕處理。

的情況是:

  1. 我們處理的塊1和2成功30,000個交易。
  2. 在第三塊中的系統剛處理8000個交易成功和與HSM的連接被阻斷後。
  3. 我們看到所有HSM座是在使用,因此交易被拒絕。

我們覺得有些插座未關閉,或者因爲消息

的體積越來越超時下面是前述代碼的要點。

; Open the device 
    OPEN SOCK:(CONNECT=HOST_":"_PORT_":TCP":DELIMITER=$C(13,10,58,27,95):ATTACH="HSMCLIENT"):TIMOUT:"SOCKET" 

    ELSE SET ER=1 CLOSE SOCK QUIT "-1" 
    ; Use the socket 
    USE SOCK 
    ; Write the request. The request message is packed and the bytesteam is written 
    WRITE HREQ,# 
    ; Read the first two bytes from the socket to identify the length of the reponse 
    READ BRESP#2:TIMOUT ELSE SET ER=1 CLOSE SOCK QUIT "-1" 
    ; Calculate the length of the incoming data 
    SET RESPLEN=$A(BRESP,1)_$A(BRESP,2) 
    ; Now read the data of the calculated length 
    READ BRESP#RESPLEN:TIMOUT ELSE SET ER=1 CLOSE SOCK QUIT "-1" 
    ; Cleanup 
    CLOSE SOCK 
    #ENDBYPASS 

如果您可以提供任何建議或recomendation將非常感激。

感謝

+0

15筆交易/秒 - 因此它需要一個半小時送30000事務的塊,你開始有點了一個多小時後,看不到失敗? – caf 2010-09-23 01:08:20

回答

0

你最有可能離開的插座中TIME_WAIT的HSM爲你發起主動關閉。

由於連接建立的速度和TIME_WAIT期間的持續時間以及有限數量的臨時端口,您最終將耗盡可用端口並且無法接受任何更多連接。

通過在完成交易時中止連接(發送RST而不是FIN),您可以避免HSM的套接字​​進入TIME_WAIT。通過在關閉連接之前將Linger選項設置爲false,可以在代碼中執行此操作。或者您也可以HSM有一個命令,您可以發送,意思是「謝謝你的是,我做了,請關閉連接」,這將允許它發起主動關閉,然後移動到TIME_WAIT的客戶機(這可能不是如果你只有一臺客戶端機器,可以幫忙,因爲你只是將問題從HSM切換到無法接受更多連接,無法啓動它們......)。