本文由石墨文档技术杜旻翔分享,原题“石墨文档 Websocket 百万长连接技术实践”,即时通讯网收录时有修订。
for { select { case <-t.C: var now = time.Now().Unix() var clients = make([]*Connection, 0) dispatcher.clients.Range(func(_, v interface{}) bool { client := v.(*Connection) lastTs := atomic.LoadInt64(&client.LastMessageTS) if now-lastTs > int64(expireTime) { clients = append(clients, client) } else { dispatcher.clearRedisMapping(client.Id, client.Uid, lastTs, clearTimeout) } return true }) for _, cli := range clients { cli.WsClose() } } }
type Packet struct { ... } type Connect struct { *websocket.Con send chan Packet } func NewConnect(conn net.Conn) *Connect { c := &Connect{ send: make(chan Packet, N), } go c.reader() go c.writer() return c }
type Packet struct { ... } type Connect struct { *websocket.Conn mux sync.RWMutex } func NewConnect(conn net.Conn) *Connect { c := &Connect{ send: make(chan Packet, N), } go c.reader() return c } func (c *Connect) Write(data []byte) (err error) { c.mux.Lock() defer c.mux.Unlock() ... return nil }
var ConnectionPool = sync.Pool{ New: func() interface{} { return &Connection{} }, } func GetConn() *Connection { cli := ConnectionPool.Get().(*Connection) return cli } func PutConn(cli *Connection) { cli.Reset() ConnectionPool.Put(cli) // 放回连接池 }
ping -s {a} {ip}
42["message",{"type":"xx","data":{"type":"xx","clients":[{"id":xx,"name":"xx","email":"xx@xx.xx","avatar":"ZgG5kEjCkT6mZla6.png","created_at":1623811084000,"name_pinyin":"","team_id":13,"team_role":"member","merged_into":0,"team_time":1623811084000,"mobile":"+xxxx","mobile_account":"","status":1,"has_password":true,"team":null,"membership":null,"is_seat":true,"team_role_enum":3,"register_time":1623811084000,"alias":"","type":"anoymous"}],"userCount":1,"from":"ws"}}]
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用:WarriorFromLong 发表于 2023-09-24 13:17 对于弃nginx的架构设计,有一点无法理解。他们是怎么做到,用户的请求负载均衡的呢。 网关部署在多台服 ...
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.125000 second(s), 37 queries , Gzip On.