3 HelloKhala示例說明

2022-08-16 04:06:16 字數 2473 閱讀 9572

最簡單的dome程式只需3行**

1

intmain()

nodeserver提供了如下介面:

void start(int usriothreadnum);

啟動服務端,永不返回,引數為除主線程外的執行緒池數。若執行緒池數不為0,則主線程只負責accept監聽服務,具體事務由執行緒池中線程處理;若執行緒池數為0,則均由主線程處理。

void settempnodeidletime(int seconds);

設定乙個臨時連線最大的空閒時間,如果這段時間內未收到有效訊息,該連線將被超時斷開。如果設定為0,則不開啟臨時連線的超時檢測,預設不開啟。必須大於超時檢測的最小單位checktime。

void setnodeidletime(int seconds);

設定乙個登入連線的最大空閒時間,如果這段時間內未收到有效訊息,該連線將被超時斷開。如果設定為0,則不開啟臨時連線的超時檢測,預設不開啟。必須大於超時檢測的最小單位checktime。

void setchecktime(int seconds);

設定每次檢測超時連線的時間,作為超時檢測的最小單位。預設為10s。如果為0,則關閉超時檢測,並將tempnodeidletime、nodeidletime置0。

bool addnodetype(nodetype* nodetype);

新增新的裝置型別事件,詳見 5、登入管理裝置型別 + 建立新的裝置型別。

void settempnodetype(tempnodetype* tempnodetype);

重寫臨時裝置型別事件,詳見  4、臨時裝置型別訊息事件。

我們設定連線線程數為4,並執行程式

如果我們設定連線線程數為0,則系統將不會建立執行緒池。監聽服務和所有連線處理都將在主線程中進行處理。

khala通過settempnodeidletime()和setnodeidletime()兩個介面提供了連線超時檢測,能夠檢測長期空閒的客戶連線。如果連線長期沒有傳送有效訊息,將被服務端強制斷開連線。此處將臨時連線設定為60s。

1

intmain()

系統日誌顯示,服務端在7分22秒時新建立乙個臨時連線。在一分鐘時間裡,服務端並沒有再接收到該連線的有效訊息,於是該連線在8分30秒時被系統判定超時,並強制斷開連線。

khala目前預設提供了login(登入)、logout(登出)、devtpye(裝置型別)、islogin(登入狀態)、nodeid(裝置id號)等事件機制。我們通過乙個簡單的客戶程式(./example/testclient/hellokhalaclient.py)對該服務端進行測試。

其中[send msg]是客戶端傳送給服務端的訊息流,採用json訊息格式(實際傳送的訊息流並不完全為顯示的json內容,因為tcp傳輸是以流的方式進行,並沒有明顯邊界,因此在每個訊息前都加上了訊息包頭用於解決粘包問題)

在預設的裝置繼承體系中,khala實現了臨時裝置和登入管理裝置兩種型別。其中在臨時裝置型別中註冊的事件訊息無需登入操作,任何連線都可以獲得該型別的訊息響應。而登入管理裝置型別中註冊的事件訊息必須執行登入操作後,才能獲取該型別的訊息響應,否則返回未識別的訊息型別。同時,如果某個裝置處於登入型別,同樣能夠獲取所有臨時裝置型別的中註冊的事件訊息。

在khala預設實現中,login、devtype、islogin屬於在臨時裝置型別中註冊的實現訊息,而logout、nodeid為在登入管理裝置中註冊的實現訊息,因此必須先執行登入操作才能獲取響應。

此處我們在未登入的情況下請求logout和nodeid,服務端響應錯誤的請求型別。如果我們執行login後再執行logout或nodeid請求,就能得到正確響應。

此處演示的預設實現的訊息事件中,除了login、logout為系統保留訊息事件,其它訊息事件都可以由使用者進行重寫。使用者也可以註冊定製符合自己裝置型別和業務邏輯需求的訊息事件,這將在接下來的文件中進行介紹。

雖然login和logout不能由使用者完全重寫訊息事件,但是系統為這兩個訊息事件提供了較多和登入生命週期相關的介面,使用者可以選擇對這些介面進行重寫以達到自己的實際需求。

MERGE 語句示例說明

ibm informix ids merge語句為dml語句,用來對比兩個表的記錄情況,根據情況執行insert的同時執行update或者delete操作。ids11.5xc6及以上版本支援該功能 1.表sale為目標表,new sale為 表,通過cust id對比兩個表的資料,當sale表有與n...

table布局示例說明

anchor 100 是什麼意思?textfiled的現實長度麼?那他和width有什麼區別?答 anchor是按anchor布局,一般指定百分比較好,字段寬度會根據容器大小動態改變,這個長度是包含標籤部分的,如果需要指定標籤部分寬度,可以設定form布局的labelwidth屬性,2,如何讓乙個c...

Esri Leaflet示例索引及說明

featurelayer.query nearby e.latlng,500 ids function error,ids neighborhoods.query 這裡的relationship.value表示空間操作,可以是within,contains,intersects,overlaps等。...