現在在做個車務通系統(**),系統需要與遠端的mina伺服器端進行交換,伺服器端由其他公司開發,只為我們提供介面,在我們的車務通系統中需要通過網路程式設計呼叫這些遠端介面,所以車務通系統相當於mina的客戶端(相對於mina伺服器端而言)。
流程是這樣的 當車務通系統的客戶端,也就是瀏覽器頁面,發出請求,車務通系統中的servlet接收,呼叫mina客戶端的iosession.write()方法 向mina伺服器端(也就是遠端伺服器)傳送請求、呼叫介面後 , 遠端伺服器會返回響應的處理結果,
然後在mina客戶端(車務通系統中接收),messagereceive()方法負責接收,在這裡遇到了問題,接收後的資料該如何返回給客戶端(瀏覽器端)。
在車務通系統客戶端,也就是瀏覽器頁面,發出請求,呼叫mina客戶端的iosession.write()方法,傳送請求前產生乙個系統全域性唯一標識,並將這個標識儲存到iosession中,如:
然後在mina客戶端(車務通系統中接收),messagereceive()方責接收到訊息時將系統全域性唯一標識從iosession中取出,將其和當前資料繫結儲存,如:
publicstatic
final mapresults = new concurrenthashmap();
public
void messagereceived(iosession session, object message) throws
exception {
//從session中取到標識
string flag = (string)session.getattribute("sendrequestflag");
//將從服務端接收到的message和標識繫結儲存,可以儲存到記憶體、佇列、檔案、資料庫等等
//在這裡簡單的以標識為key,message為value儲存到map中
results.put(flag, message);
//關閉session
session.close(true
);}
最後通過系統全域性唯一標識獲取結果並返回給客戶端
//通過標識獲取儲存的結果
object result =clienthandler.results.get(flag);
//清除標識內容
clienthandler.results.remove(flag);
//將結果返回客戶端
response.getwriter().write(result.tostring());
從上可知,我們可以通過iosession將乙個標識傳到messagereceived方法中,熟悉web開發的知道,iosession在這裡跟httpsession使用方式一樣,因此我們可以將任何東東通過iosession傳到messagereceived方法中,比如httpservletrequest、httpservletresponse、spring bean、hibernate dao、資料庫連線等等。反之,在messagereceived方法中通過iosession將接收後的資料或任何其它東東傳到外面,這時就不能在messagereceived方法中關閉iosession了。
看到的應用mina做的乙個例項
現在在做個車務通系統 系統需要與遠端的mina伺服器端進行交換,伺服器端由其他公司開發,只為我們提供介面,在我們的車務通系統中需要通過網路程式設計呼叫這些遠端介面,所以車務通系統相當於mina的客戶端 相對於mina伺服器端而言 流程是這樣的 當車務通系統的客戶端,也就是瀏覽器頁面,發出請求,車務通...
看到乙個有趣的東東。
這段時間忙著搬新公司,一直也沒上來寫東西,今天在面試簡歷的看到乙個非常有趣的自我介紹,原文如下 自我評價 本人安于工作,誠實肯幹,勇於挑戰和接受新知識 現大專在讀 相信我的努力定能為你帶來一分意外的收穫。相信他的能力吧 擅長騙取弱小可欺的女孩的身體及錢財,弱女子到手後要求她買膝上型電腦,包括在兩小孩...
Tab控制項的乙個簡單應用例項
1 首先建立乙個mfc對話方塊框架,在對話方塊資源上從工具箱中新增上乙個tab control 控制項,根據需要修改一下屬性,然後右擊控制項,為這個控制項新增乙個變數,將此控制項跟乙個ctabctrl類變數繫結在一起,這裡設為m tabctrl 2 建立兩個新的對話方塊資源,其屬性作如下修改 bor...