美文网首页
【转】golang websocket hub连接的实现

【转】golang websocket hub连接的实现

作者: 大雁儿 | 来源:发表于2017-10-20 17:49 被阅读65次
    package main
    
    
    
    type hub struct {
    
      // 注册了的连接器
    
      connections map[*connection]bool
    
    
    
      // 从连接器中发入的信息
    
      broadcast chan []byte
    
    
    
      // 从连接器中注册请求
    
      register chan *connection
    
    
    
      // 从连接器中注销请求
    
      unregister chan *connection
    
    }
    
    
    
    var h = hub{
    
      broadcast:   make(chan []byte),
    
      register:    make(chan *connection),
    
      unregister:  make(chan *connection),
    
      connections: make(map[*connection]bool),
    
    }
    
    
    
    func (h *hub) run() {
    
      for {
    
          select {
    
          case c := <-h.register:
    
              h.connections[c] = true
    
          case c := <-h.unregister:
    
              if _, ok := h.connections[c]; ok {
    
                  delete(h.connections, c)
    
                  close(c.send)
    
              }
    
          case m := <-h.broadcast:
    
              for c := range h.connections {
    
                  select {
    
                  case c.send <- m:
    
                  default:
    
                      delete(h.connections, c)
    
                      close(c.send)
    
                  }
    
              }
    
          }
    
      }
    
    }
    

    相关文章

      网友评论

          本文标题:【转】golang websocket hub连接的实现

          本文链接:https://www.haomeiwen.com/subject/wpbvuxtx.html