Go实现在线用户消息推送实战!
比如下面的需求场景
1:运营给在线的用户推送一些活动或者文案或者公告
2:实时监控和通知:在监控系统中,可以使用消息推送来实时向操作员发送系统警报和通知。例如,当系统出现异常或达到某个阈值时,服务器可以向操作员发送警报消息。
3:社交网络和新闻资讯:使用消息推送来通知用户有新的消息、新的粉丝或者新的内容更新,增强用户参与度和留存率。
等等 ... 太多了场景,所以这个技术点我们一定要掌握起原理,防止哪天此类需求落到我们头上
Go+Html实现消息推送
实现需求:运营端:Admin.html 用于模拟运营发送公告指令 用户端:Client.html 用户模拟用户客户端 服务端:Server.go 服务器
消息推送服务器Server.go
package main
import (
"fmt"
"net/http"
"github.com/gorilla/websocket"
)
var (
clients = make(map[*websocket.Conn]bool)
broadcast = make(chan []byte)
upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true // 允许所有来源的连接
},
}
)
func handleMessages() {
for {
message := "broadcast Start")
for client := range clients {
fmt.Println(message)
err := client.WriteMessage(websocket.TextMessage, message)
if err != nil {
fmt.Println("Error writing to client:", err)
client.Close()
delete(clients, client)
}
}
}
}
func wsHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println("Error upgrading to websocket:", err)
return
}
defer conn.Close()
clients[conn] = true
for {
_, by, err := conn.ReadMessage()
if err != nil {
fmt.Println("Client disconnected:", err)
delete(clients, conn) // 从映射中移除客户端
break
}
// 将字节数据转换为字符串
message := string(by)
broadcast main() {
http.HandleFunc("/ws", wsHandler)
go handleMessages()
fmt.Println("Server running on localhost:8080")
http.ListenAndServe(":8080", nil)
}
运营操作端Admin.html
"en">
"UTF-8">
"viewport" content="width=device-width, initial-scale=1.0">
Admin Panel
type="text" id="messageInput" placeholder="Type your message...">
用户客户端 Client.html
"en">
"UTF-8">
"viewport" content="width=device-width, initial-scale=1.0">
Client Panel
"messages">
版权声明:
作者:漏网的鱼
链接:https://www.csev.cn/share/code/20240410173.html
来源:彩色动力-测试分享
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
作者:漏网的鱼
链接:https://www.csev.cn/share/code/20240410173.html
来源:彩色动力-测试分享
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
THE END
二维码
打赏
文章目录
关闭
共有 0 条评论