向新客户端发送Websocket消息



我正在使用Go和Gorilla websocket创建一个聊天API。我希望我的用户收到关于建立websocket连接的最后10条消息。然而我找不到一个简单的方法来做到这一点。我只是想发送每条消息从我的消息数组到新的客户端。有没有一个简单的方法来编辑我的代码没有集线器?下面是我的代码:

package messenger
import (
"../config"
"fmt"
"github.com/go-chi/chi"
"github.com/gorilla/websocket"
log "github.com/sirupsen/logrus"
"net/http"
)
func InitRouter() http.Handler {
r := chi.NewRouter()
r.Get("/", getWebsocket)
return r
}
var clients = make(map[*websocket.Conn]bool) // connected clients
var broadcast = make(chan Message)           // broadcast channel
var messages = []Message{}
// Configure the upgrader
var upgrader = websocket.Upgrader{}
func getWebsocket(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
saveMessage(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)
}
}
}
}
func saveMessage(m Message) {
if len(messages) >= config.Conf.MessageAmount {
messages = messages[1:]
}
messages = append(messages, m)
fmt.Println(messages)
}

看来我做到了。我刚刚创建了一个新函数,并通过传递新创建的Websocket从getWebsocket函数调用它。下面是新函数:

func serveInitialMessages(ws *websocket.Conn) {
for _, m := range messages {
fmt.Println(m)
err := ws.WriteJSON(m)
if err != nil {
fmt.Println(err)
}
}

}

最新更新