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)
}

605f21853527262615397c3a1c21a9ef

运营操作端Admin.html

nbsp;html>
"en">

    "UTF-8">
    "viewport" content="width=device-width, initial-scale=1.0">
    Admin Panel


type="text" id="messageInput" placeholder="Type your message...">





2dee97cb4f59543560d8bee33d48bf3b

用户客户端 Client.html

nbsp;html>
"en">

    "UTF-8">
    "viewport" content="width=device-width, initial-scale=1.0">
    Client Panel


    "messages">

ba2bf5ec6696fb713d0ef5373a4ee4ff

 

版权声明:
作者:89391311
链接:https://www.csev.cn/share/code/20240410173.html/
来源:测试分享
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
THE END
根据我国《计算机软件保护条例》第十七条规定:“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录