1. 程式人生 > >基於linux下的區域網聊天

基於linux下的區域網聊天

主執行緒:構造伺服器物件,建立libevent,監聽伺服器的監聽套接字;建立pth_nuumsocker_pair,加入到伺服器儲存的socker_pair_vector,socket_pair0端處理為繫結事件發生的回撥函式socketpair_cb(),全部事件加入到主執行緒libevent,而在socketpair_cb()中只接受子執行緒傳送過來的當前其對應的監聽個數,收到後更新map;建立核心-1個子執行緒,利用socketpair進行主執行緒和子執行緒間的通訊,所有子執行緒儲存在子執行緒的vector中,建立子執行緒物件時在socketpair1端傳給子執行緒。之後的子執行緒用
1端和主執行緒通訊;socketpair0端加入到伺服器物件map中,map表中的每個鍵值對value初值為0;主執行緒的libevent有事件發生時,呼叫相應的回撥函式,如果監聽的套接字上有事件發生,說明有客戶端和伺服器進行連線,主執行緒呼叫監聽套接字的相應回撥函式。在listen_cb()accept新客戶端,產生套接字,隨後檢視伺服器的map表,選擇監聽最少的子執行緒,map0端與子執行緒進行通訊,將新產生的客戶端套接字傳送給相應子執行緒(如果sp_fd上事件發生那說明子執行緒給主執行緒傳送訊息,此時主執行緒呼叫響應的socketpair_cb());和客戶端進行通訊,客戶端的請求交給子執行緒處理,主執行緒只判斷客戶端的連線。子執行緒根據客戶端的訊息型別做相應處理。