天天看點

Socket開發架構之消息的回調處理

在一般的Socket應用裡面,很多時候資料的發送和接收是分開處理的,也就是我們發送一個消息,不知道這個請求消息什麼時候得到應答消息,而且收到對應的應答消息的時候,如果操作界面的内容,也是需要特别處理的,因為它們和界面線程是不在一起的。如果我們在發送消息的時候,能夠給一段回調的代碼給收到應答消息的時候處理,那麼就會友善很多。本文主要介紹如何在Socket應用裡面,通過回調函數的處理,實作收到應答消息的時候能夠調用對應的函數。

在上一篇的随筆裡面,介紹了基于Json的Socket消息的實體類設計,其中包括了消息回調ID和是否在調用後移除回調兩個屬性,這個是用來為回調處理服務的,如下所示。

Socket開發架構之消息的回調處理

也就是在通用消息對象BaseMessage類裡面添加下面兩個屬性。

Socket開發架構之消息的回調處理

但我們需要發送消息的時候,我們把回調的ID添加到本地集合裡面,得到應答的時候,在從集合裡面提出來,執行就可以了。

在服務端,需要根據請求的消息建構應答内容,是以我們在應答請求的時候,需要把請求的回調ID給複制到應答的消息體裡面,如下所示。

調用方在收到伺服器的應答消息的時候,會根據回調的ID ,從本地集合裡面調出來并執行處理,實作了我們回調的操作。

這樣,我們在調用的時候,傳入一個回調的Action,讓收到消息後進行動态執行就可以了。例如在登陸的時候,我們如果需要在登陸成功後顯示主窗體,那麼可以執行下面的處理代碼。

或者我們來看看另外一個例子,這個例子是在使用者登陸的時候,請求一次線上使用者清單,如果使用者線上,那麼在界面上展示清單,具體操作代碼如下所示,也是利用了回調函數的處理方式。

例如,用戶端登陸幾個使用者後,使用者可以獲得線上使用者清單,界面展示如下所示。

Socket開發架構之消息的回調處理

以上就是我們在Socket應用裡面處理回調函數的實作過程,這樣處理可以很好利用回調代碼來封裝處理的細節,對于了解相關的應答操作也是很直覺的。