Golang一对一聊天
发布时间:2020-12-16 09:24:55 所属栏目:大数据 来源:网络整理
导读:我想在golang上进行一对一的聊天,我发现这个简单的脚本与websocket它工作得很好,它是一个房间,你想要多少用户.但是我希望将它转换为一对一,就像facebook一样,这是脚本,如果有人可以提供帮助,因为我不知道我需要使用更多连接或过滤用户. package mainimport (
我想在golang上进行一对一的聊天,我发现这个简单的脚本与websocket它工作得很好,它是一个房间,你想要多少用户.但是我希望将它转换为一对一,就像facebook一样,这是脚本,如果有人可以提供帮助,因为我不知道我需要使用更多连接或过滤用户.
package main import ( "log" "net/http" "github.com/gorilla/websocket" ) var clients = make(map[*websocket.Conn]bool) // connected clients var broadcast = make(chan Message) // broadcast channel // Configure the upgrader var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true },} // Define our message object type Message struct { Email string `json:"email"` Username string `json:"username"` Message string `json:"message"` Created string `json:"created"` } func main() { // Create a simple file server fs := http.FileServer(http.Dir("public")) http.Handle("/",fs) // Configure websocket route http.HandleFunc("/ws",handleConnections) // Start listening for incoming chat messages go handleMessages() // Start the server on localhost port 8000 and log any errors log.Println("http server started on :8090") err := http.ListenAndServe(":8090",nil) if err != nil { log.Fatal("ListenAndServe: ",err) } } func handleConnections(w http.ResponseWriter,r *http.Request) { // Upgrade initial GET request to a websocket ws,err := upgrader.Upgrade(w,r,nil) if err != nil { log.Fatal(err) } // Make sure we close the connection when the function returns defer ws.Close() // Register our new client clients[ws] = true for { var msg Message // Read in a new message as JSON and map it to a Message object err := ws.ReadJSON(&msg) if err != nil { log.Printf("error: %v",err) delete(clients,ws) break } // Send the newly received message to the broadcast channel broadcast <- msg } } func handleMessages() { for { // Grab the next message from the broadcast channel msg := <-broadcast // Send it out to every client that is currently connected for client := range clients { err := client.WriteJSON(msg) if err != nil { log.Printf("error: %v",err) client.Close() delete(clients,client) } } } } 我需要改变这一部分 clients[ws] = true 解决方法
你需要做几件事:
>摆脱广播频道 请注意StackOverflow不是要求为您编写代码的地方. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |