golang 單點推送
我想問一下後臺的單點推送怎麼做啊,是篩選連線,找到正確的連線然後推送嗎??求大神指點,這是我寫的廣播
package main
import (
"github.com/gorilla/websocket"
"log"
"fmt"
"net/http"
"time"
)
var clients = make(map[*websocket.Conn]bool)
var broadcast = make(chan Message)
var upgrader = websocket.Upgrader{}
var chananel = make(chan string)//資料chan
type Message struct {
Message string `json:"message"`
}
//有插入資料的時候就去資料庫
func hu(w http.ResponseWriter, r *http.Request) {
chananel <- "aksjhdfkjahsdkjfhkj"
}
func main() {
fs := http.FileServer(http.Dir("."))
http.Handle("/", fs)
http.HandleFunc("/o", hu)
http.HandleFunc("/ws", handleConnections)
go handleMessages()
err := http.ListenAndServe(":8000", nil)
if err != nil {
log.Println(err.Error())
}
}
//註冊成為 websocket
func handleConnections(w http.ResponseWriter, r *http.Request) {
//獲取引數
ws, err := upgrader.Upgrade(w, r, nil)
defer ws.Close()
if err != nil {
log.Println(err.Error())
}
defer ws.Close()
clients[ws] = true
for {
s := <-chananel
msg := Message{Message: "資料" + time.Now().Format("2006-01-02 15:04:05") + s}
broadcast <- msg
}
}
//廣播傳送至頁面
func handleMessages() {
for {
msg := <-broadcast
fmt.Println(clients)
for client := range clients {
err := client.WriteJSON(msg)
if err != nil {
log.Println(err.Error())
client.Close()
delete(clients, client)
}
}
}
}
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Golang奇葩點Golang
- Golang 基於單節點 Redis 實現的分散式鎖GolangRedis分散式
- golang 單元測試Golang
- golang flag簡單用法Golang
- Golang介面簡單瞭解Golang
- golang實現單例模式Golang單例模式
- golang 切片簡單運用Golang
- golang如何實現單例Golang單例
- ios-10 推送中注意的點iOS
- dg搭建 單點-單點
- Golang switch case 的使用注意點Golang
- golang struct 有點小疑問?GolangStruct
- golang小知識點記錄Golang
- Golang 單元測試 - 介面層Golang
- iOS 10 來點不一樣的推送iOS
- 【GoLang 那點事】實踐 gRPC 之 GoLang 入門 HelloWord(三)GolangRPC
- 推送公司今日選單內容到手機
- 策略模式+單例模式+簡單工廠模式:推送服務模式單例
- 未讀訊息(小紅點),前端與 RabbitMQ實時訊息推送實踐,賊簡單~前端MQ
- 外貿郵件推送理解的幾個點
- 推送!10大主流AI模型適用盤點AI模型
- GoLang設計模式04 - 單例模式Golang設計模式單例
- Golang簡單製作一個池Golang
- golang - base64簡單解讀Golang
- golang設計模式之單例模式Golang設計模式單例
- gRPC的Golang簡單應用RPCGolang
- Golang 單元測試 - 邏輯層Golang
- Golang 單元測試 - 資料層Golang
- wechat_pusher : 基於Golang開發的微信訊息定時推送框架Golang框架
- golang split需要注意的一個點Golang
- Golang中常用的程式碼優化點Golang優化
- 關於實時推送系統的那點事
- Golang 對MongoDB的操作簡單封裝GolangMongoDB封裝
- 一文看懂golang單元測試Golang
- golang count 單字元 字串 統計函式Golang字元字串函式
- Golang多執行緒簡單鬥地主Golang執行緒
- 用Golang做點自動化的東西Golang
- Golang中defer的三個實戰要點Golang