服務端流程圖如下:
//客戶端結構體
type client struct
//var is_online map[string
]client
//訊息通訊
var messages = make(chan string)//
廣播全域性訊息到客戶端
func message()
}}//
生產訊息函式
func makemsg(client client, msg string) (buf string
) //
func writemsgtoclient(conn net.conn,client client)
}func handler(conn net.conn)
// is_online[addr] =client
//建立乙個協程,專門給當前客戶端發訊息
go writemsgtoclient(conn,client)
//將使用者上線的訊息放到全域性訊息中
messages
//go func()
msg := string(buf[:n])
//將客戶端發的訊息加入到全域性訊息通道中
messages
}}()
//讓協程不停止執行
for}
func main()
defer listen.close()
//建立協程處理訊息
go message()
for
//建立協程處理客戶端事件
go handler(conn)
defer conn.close()}}
效果圖如下:
go 簡單聊天室
package main import fmt net strings time 建立使用者結構體型別 type cline struct var onlinemap map string cline 建立全域性 channel 傳遞使用者訊息 var message make chan strin...
神奇的go語言(聊天室的開發)
package main import fmt os net 錯誤檢查 func checkerror err error,info string res bool return true 伺服器端接收資料執行緒 引數 資料連線 conn 通訊通道 messages func handler con...
奇妙的go語言(聊天室的開發)
package main import fmt os net 錯誤檢查 func checkerror err error,info string res bool return true server端接收資料執行緒 引數 資料連線 conn 通訊通道 messages func handler ...