直接上代碼了
在main方法裏進行端口監聽
在server包實現具體邏輯,首先定義3個結構體
分別是所有客戶端管理者(申明瞭有兩個map 這兩個map分別是綁定的是所有客戶端連接,和單個客戶端連接),後面兩個分別是單個客戶端和上傳數據類型
接下來就是具體的實現邏輯
這只是一個demo示例,其中只開了一個read不斷讀取的協程,沒有開啓write協程,讓他們通過管道來通信,沒有利用到go高併發的優勢,但是這樣一方面也能防止通道阻塞。代碼寫的很一般,比如沒有代碼分層,switch都寫在一起了,按理說至少還能抽出來一個processData。。總而言之 這只是個簡單的demo
具體效果
如果關閉chatroom,服務器端會自動刪除兩個map 的中,推送的時候會提示沒有發現client..
綜上,這只是一個demo ,很多細節沒有考慮,具體實際場景也有很大差異。。連最基本的redis 和mysql 都沒用到,比如消息要留檔,已讀未讀 可能需要開啓一個goroutine 去入庫,如果是羣聊 可能還需要一個羣id,這個羣id下面可能還需要維護多個client 等等