工具类

SSE

  1. type SSE struct {
  2. http.ResponseWriter
  3. context.Context
  4. }
  5. func NewSSE(w http.ResponseWriter, ctx context.Context) *SSE
  6. func (sse *SSE) WriteEvent(event string, data []byte) (err error)
  7. func (sse *SSE) WriteJSON(data interface{}) (err error)
  8. func (sse *SSE) WriteExec(cmd *exec.Cmd) error

用于方便的进行提供SSE服务。

  • NewSSE 从http的handler函数提供的参数创建SSE辅助对象。
  • WriteEvent 发送时间
  • WriteJSON 发送json对象
  • WriteExec 执行一个cmd,然后将输出结果推送的浏览器

示例:

  1. func summary(w http.ResponseWriter, r *http.Request) {
  2. sse := NewSSE(w, r.Context())
  3. Summary.Add()
  4. defer Summary.Done()
  5. sse.WriteJSON(&Summary)
  6. ticker := time.NewTicker(time.Second)
  7. defer ticker.Stop()
  8. for {
  9. select {
  10. case <-ticker.C:
  11. if sse.WriteJSON(&Summary) != nil {
  12. return
  13. }
  14. case <-r.Context().Done():
  15. return
  16. }
  17. }
  18. }