**伺服器處理使用者的請求和後端伺服器的響應,並且這兩方的請求和響應是相互對應的,因此對於**接收到伺服器的響應該如何找到這個響應對應的使用者請求;甚至**在處理乙個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 ...