socket關聯查詢

2022-08-21 08:12:10 字數 1762 閱讀 8133

**伺服器處理使用者的請求和後端伺服器的響應,並且這兩方的請求和響應是相互對應的,因此對於**接收到伺服器的響應該如何找到這個響應對應的使用者請求;甚至**在處理乙個socket描述符時,如何確定是傳送給使用者的響應,還是發給後端伺服器的請求。

我提出來的方案是

socket關聯查詢整體模型如下圖所示:

socket關聯查詢整體模型

為了建立**對客戶端的請求與後端伺服器的響應,建立乙個對映雜湊表。socket關聯查詢詳細模型如圖所示:

socket關聯查詢詳細模型

1、使用者請求連線時,先加入到epoll中,建立連線後,並且有請求任務到來時,將該任務加入到執行緒池,即對fdc進行操作;

2、當使用者實際上是與後端伺服器互動時,**需要與後端伺服器建立連線,這時需要建立乙個fds,這時將以fdc和fds為關鍵字加入到雜湊表中;

3、當後端伺服器有響應時,加入到epoll中;當有響應任務時,加入到執行緒池處理響應任務;

4、當**需要將後端伺服器的響應再次響應給使用者時,查詢匹配雜湊表,即可找到fds與fdc的對映,這樣就能正確的對該請求的使用者進行響應。

對於雜湊表的設計,下面又給出實驗**:當然具體實現還待將**的功能實現在將這個整合。**如下:

#include    #include    

#include

#include

#define hashsize 997

#define c_s 2

#define s_c 1typedef

struct

_node node;

typedef

struct

_hash hash;

struct

_node;

struct

_hash;

static

hash hash[hashsize];

/*雜湊函式

*/int hash_fun(int

ref_fd)

/*初始化雜湊表

*/void

hash_init()}/*

雜湊節點的匹配

*/node*hash_fdmate(

intref_fd)

}return

null; }/*

雜湊節點的插入

*/node*hash_insert(

int fdc, int

fds)

else

/*先以fds加入到雜湊表中

*/hash_val =hash_fun(fds);

if(hash[hash_val].next ==null)

else

return

node_c;}/*

銷毀整雜湊表

*/void

hash_destroy()

/*刪除雜湊中的某個節點

*/node*hash_delete(

intref_fd)

#if 1

int main(void

) printf(

"%d\n

", np->conn_staut);

return0;

}#endif

mysql關聯查詢去重 MySQL 關聯查詢

mysql 關聯查詢 sql資料分析 1週前 mysql 關聯查詢 前面,我們介紹的都是單錶查詢 就是只從一張表中獲取資料 而實際應用的時候,我們都會同時查詢多張表,這裡,我們就介紹下,多表關聯查詢的使用。sql join 用於根據兩個或多個表中的列之間的關係,從這些表中查詢資料 前置知識 主鍵 p...

表關聯查詢

一 內連線和外連線 內連線用於返回滿足連線條件的記錄 而外連線則是內連線的擴充套件,它不僅會滿足連線條件的記錄,而且還會返回不滿足連線條件的記錄,語法如下 oracle 1.select table1.column,table2.column from table1 inner left right...

表關聯查詢

一 表關聯查詢 1.表的關聯分兩類 有關係的關聯 無關係的關聯 2.表的有關係的關聯 內關聯 where 指定關聯關係 表1.欄位 表2.欄位 and 表2.欄位 表3.欄位 有關係關聯 通過字段關係,把多張表合併在一起.select s emp.id,first name,name from s ...