作家
登录

如何使用Go建开发高负载WebSocket服务器

作者: 来源: 2017-09-13 15:47:14 阅读 我要评论

51CTO诚邀您9月23号和秒拍/国美/美团元专家一路聊智能CDN的优化之路,抓紧时光哦!


嗨,大年夜家好! 我的名字是Sergey Kamardin,我是Mail.Ru的工程师。

介绍

起首介绍我们的故事的高低文,应当介绍几点我们为什么须要这个办事器。

Mail.Ru有很多有状况的体系。 用户电子邮件存储是个中之一。 跟踪体系中的状况变更和体系事宜有几种办法。 这主如果经由过程按期体系轮询或关于其状况变更的体系通知。

若何应用Go建开辟高负载WebSocket办事器

两种方法都有利弊。 然则当涉及邮件时,用户收到新邮件的速度越快越好。

是以,为了削减办事器上的负载并加快邮件传递给用户,决定经由过程编写宣布-订阅办事器,一方面将接收有关状况更改的通知,另一方面则会收到这种通知的订阅。

先前

若何应用Go建开辟高负载WebSocket办事器

如今

第一个筹划显示了以前的样子。 浏览器按期轮询API,并萌芽有关Storage(邮箱办事)的更改。

第二个筹划描述了新架构。 浏览器与通知API建立WebSocket连接,通知API是Bus办事器的客户端。收到新的电子邮件后,Storage会向Bus(1)发送一条通知,由Bus发送到订阅┞愤。 API肯定连接以发送接收到的通知,并将其发送到用户的浏览器(3)。

所以今天我们将评论辩论API或WebSocket办事器。 我们的办事器将有大年夜约300万个在线连接。

实现方法

让我们看看若何应用Go函数实现办事器的某些部分,而无需任何优化。

  1. pool := gopool.New(128) 
  2.  
  3. poller.Start(conn, netpoll.EventRead, func() { 
  4.     // We will block poller wait loop when 
  5.     // all pool workers are busy. 
  6.     pool.Schedule(func() { 
  7.         Receive(ch) 
  8.     }) 
  9. }) 

在进行net/http ,我们来谈谈我们若何发送和吸法术据。 站在WebSocket协定(例如JSON对象) 之上的数据鄙人文中将被称为分组 。

我们开端实现包含经由过程WebSocket连接发送和接收这些数据包的Channel构造。

channel 构造

  1. // Packet represents application level data. 
  2. type Packet struct { 
  3.     ... 
  4.  
  5. // Channel wraps user connection
  6. type Channel struct { 
  7.     conn net.Conn    // WebSocket connection
  8.     send chan Packet // Outgoing packets queue. 
  9.  
  10. func NewChannel(conn net.Conn) *Channel { 
  11.     c := &Channel{ 
  12.         conn: conn, 
  13.         send: make(chan Packet, N), 
  14.     } 
  15.  
  16.     go c.reader() 
  17.     go c.writer() 
  18.  
  19.     return c 

所以在最多的时刻,我们的Channel.reader()和Channel.writer()正在等待接收或发送数据的处理。 每个都有4 KB的I/O缓冲区。

  1. func ReadFrame(io.Reader) (Frame, error)  
     1/7    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      通过云库存管理遏制随需应变的自助服务风险

    51CTO诚邀您9月23号和秒拍/国美/美团元专家一路聊智能CDN的优化之路,抓紧时光哦! 然则因为云计算的按需自助办事模式,营业的其他部分经常会供给新办事,并绕开企业的IT办事,这可能会增长>>>详细阅读


    本文标题:如何使用Go建开发高负载WebSocket服务器

    地址:http://www.17bianji.com/lsqh/37391.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)