項目名:基於linux下的高性能負載均衡聊天伺服器。 2018 年 1 月 15 日開始做這個項目,現在是1 月 27 號 已經把基礎功能先大概實現了,由於是我的第一個項目,接下來會好好記錄一下。後續會往裡面陸續地加入東西,以及壓力測試等,同時也是為3月的春招做準備。 首先需要使用socket編程, ...
項目名:基於linux下的高性能負載均衡聊天伺服器。
2018 年 1 月 15 日開始做這個項目,現在是1 月 27 號 已經把基礎功能先大概實現了,由於是我的第一個項目,接下來會好好記錄一下。後續會往裡面陸續地加入東西,以及壓力測試等,同時也是為3月的春招做準備。
首先需要使用socket編程,實現客戶端和伺服器端的信息交互,前期實現的功能有5個:註冊,登陸,退出,1對1聊天,1對多聊天。
伺服器端接收處理數據,以及與客戶端交流的大概架構
伺服器端:首先確定使用多線程來處理客戶端請求,主線程發送accept的值將接收的客戶端套接字發給支線程,之後全權交給支線程去處理,主線程繼續去接收。
相應的支線程發送自己監聽套接字的壓力值,方便主線程下一次選擇壓力最小的支線程。
支線程監聽套接字後recv,處理完成後給客戶回覆結果,如:登陸成功等。
客戶端:主線程不斷接受命令,解析後處理,向伺服器端發送數據。支線程在程式開始時開始執行,監聽伺服器端發送的數據。
- 對於主線程和支線程之間的通信選擇sockpair,主線程保存0端,支線程保存1端。
- 對於搜索,使用了STL中的map
- 使用MVC設計模式,每個線程都有一個控制台,數據解析後去尋找相應的視圖,進行處理。
- 對於監聽套接字,使用了libevent庫,之後有時間了去剖剖源碼。
- 對於數據的打包,解析,使用了json
-
用戶的數據使用mysql存儲。
mysql中創建了三張表:Usr('name','password'),Online('name','cli_fd'),Offline('name','message'); 還有一些細節實現,登陸時如果已經線上則將原來的頂掉,併發送一個異地登陸。 如果對方不線上時發送消息,加入到離線消息,在對方上線時提醒。
現在主要完成了伺服器端的代碼,實現了登陸 註冊 退出 1對1聊天,可以跑起來了,但是客戶端的細節很粗糙,更像是mail聊天,如果有時間的話可以弄一弄。