赞
踩
SSE(Serversentevents)是浏览器向服务器发送请求并保持长连接的技术,服务器通过长连接将数据推送到浏览器。SSE通常用于实时更新网页内容或获得服务器推送的通知。
下面是实现一个基于事件驱动的SSE程序的步骤:
下面是一个用Go语言实现基于事件驱动的SSE程序的代码示例:
- package main
-
- import (
- "fmt"
- "net/http"
- "time"
- )
-
- type Event struct {
- Data string
- Id int
- }
-
- var clients = make(map[chan Event]bool)
- var events = make(chan Event)
-
- func main() {
- http.HandleFunc("/stream", streamHandler)
- go broadcastEvents()
- http.ListenAndServe(":8080", nil)
- }
-
- func streamHandler(w http.ResponseWriter, r *http.Request) {
- flusher, ok := w.(http.Flusher)
- if !ok {
- http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
- return
- }
- w.Header().Set("Content-Type", "text/event-stream")
- w.Header().Set("Cache-Control", "no-cache")
- w.Header().Set("Connection", "keep-alive")
- clientEventChan := make(chan Event)
- clients[clientEventChan] = true
- defer func() {
- delete(clients, clientEventChan)
- close(clientEventChan)
- }()
- for {
- select {
- case event := <-clientEventChan:
- fmt.Fprintf(w, "data:%s\nid:%d\n\n", event.Data, event.Id)
- flusher.Flush()
- case <-time.After(time.Second * 30):
- return
- }
- }
- }
-
- func broadcastEvents() {
- for {
- event := <-events
- for clientEventChan := range clients {
- clientEventChan <- event
- }
- }
- }

这是一个简单的SSE服务器实现,可以在本地启动一个基于事件驱动的SSE服务器,在浏览器中访问"http://localhost:8080/stream"即可订阅事件。
在我们的SagooIOT开源的项目中就对SSE进行了封装,复杂的使用可以参考:https://iotdoc.sagoo.cn/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。