用Go语言实现推送服务器用Go语言实现推送服务器 陈叶皓 chen.yh@ctrip.com 议程 • 推送服务器介绍 • Golang特点 • 推送服务架构 • 部分代码 • 上线效果 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 什么是推送服务器 • 推送业务信息到手机端 • 始终保持连接 推送服务器要求 • 高并发 • 可靠性 • 高性能 • 支持水平扩展 • 无单点故障 无单点故障 Go语言特性 • 静态的、编译的 • 自动内存回收 • 命令式编程 • 函数可以作为值 • 面向并发 • 内置RPC支持 推送服务器要求的应对 • 高并发 – goroutine • 可靠性 – 使用Redis暂存消息 • 高性能 – 静态编译语言 • 支持水平扩展 – 使用RPC组成集群 • 无单点故障 – 使用Redis实现数据共享 Go语言的并发模型 • 事件驱动,共享线程池 包含一 个获取返回值的channel 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 逻辑架构 去中心化设计 • 客户端随机连接 • Redis集中存储地址表 • 信息发送2跳到达 消息缓存设计 • 消息预存(Redis) • 尝试发送 • 发送成功后删除 客户端注册时序图 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 串行场景-Socket0 码力 | 25 页 | 260.04 KB | 1 年前3
基于 Rust 语言编写的可编程的全球分布式 MQTT 服务器 王文庭0 码力 | 31 页 | 3.95 MB | 1 年前3
ffmpeg翻译文档track_index 选项可以用来指定不同的音 轨。音轨索引从0开始。分离器可以从音轨元数据中导出音轨索引 对于巨大的文件, max_size 选项可以用来调整 从使用quvi项目的因特网服务器播放媒体 这个分离器要求 format 选项被指定一个品质,默认是 best 参考http://quvi.sourceforge.net/了解更多信息 编译时需要 --enable-libquvi stream_segment, ssegment例子 22 混合器 - 187 - 本文档使用 书栈(BookStack.CN) 构建 平滑流混合器生成一组文件(清单、块),适用于传统web服务器 window_size 指定清单中保留的片段数。默认是0,表示保留所有的 extra_window_size 从磁盘移除前,保留清单外片段数,默认5 lookahead_count 指定先行片段数,默认2 ftp-write-seekable 控制持续编码时连接的可搜索性。如果设置为1表示可以搜索,如果设置为0则不可搜索,默认为 0 注意协议可以用于输出,但通常不建议这样使用,除非特殊任务要求(测试时、定制的服务器配置等 等)。不同的FTP服务提供不同的持续定位处理。ff*工具对它们的支持是不完整的。 把Apple的HTTP直播分段流作为一个统一的进行读取。描述分段的 M3U8 播放列表文件可以是远程0 码力 | 502 页 | 3.06 MB | 1 年前3
使用 PlantUML 绘制 UML - PlantUML 语言参考指引(Version 1.2023.11)"inner process 1" <<$businessProcess>> as src rectangle "inner process 2" <<$businessProcess>> as tgt src -> tgt } @enduml PlantUML 语言参考指引 (1.2023.11) 157 / 538 7.13 显示参数 7 组件图 7.13 显示参数 用 skinparam 改变字体和颜色。 1 定义一个网络 @startuml nwdiag { network dmz { address = "210.x.x.x/24" } } @enduml 13.1.2 定义网络中的一些元素或服务器 @startuml nwdiag { network dmz { address = "210.x.x.x/24" web01 [address = "210.x.x.1"]; web02 [address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 13.1.2 定义网络中的一些元素或服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 13.1.3 完整的例子 . . . . . . . . . . . .0 码力 | 539 页 | 7.74 MB | 1 年前3
An Introduction to Leant0 ← infer_type h1, t ← whnf t0, (do a ← match_not t, h2 ← find_same_type a hs, tgt ← target, pr ← mk_app `absurd [tgt, h2, h1], exact pr) <|> contra_aux rs hs meta def contra : tactic unit := CHAPTER0 码力 | 48 页 | 191.92 KB | 1 年前3
PlantUML 1.2019.3 Справочное руководство по языку"inner process 1" <<$businessProcess>> as src rectangle "inner process 2" <<$businessProcess>> as tgt src -> tgt } @enduml 6.11 Skinparam Вы можете использовать команду skinparam для изменения шрифтов и цветов0 码力 | 159 页 | 1.76 MB | 1 年前3
PlantUML 1.2019.2 Справочное руководство по языку"inner process 1" <<$businessProcess>> as src rectangle "inner process 2" <<$businessProcess>> as tgt src -> tgt } @enduml 6.11 Skinparam Вы можете использовать команду skinparam для изменения шрифтов и цветов0 码力 | 159 页 | 1.76 MB | 1 年前3
PlantUML 1.2019.1 Справочное руководство по языкуprocess 1" <<$businessProcess >> as src rectangle "inner process 2" <<$businessProcess >> as tgt src -> tgt } @enduml 6.11 Skinparam Вы можете использовать команду skinparam для изменения шрифтов и0 码力 | 147 页 | 1.89 MB | 1 年前3
PlantUML 1.2019.6 Справочное руководство по языку"inner process 1" <<$businessProcess>> as src rectangle "inner process 2" <<$businessProcess>> as tgt src -> tgt } @enduml 6.11 Skinparam Вы можете использовать команду skinparam для изменения шрифтов и цветов0 码力 | 173 页 | 1.95 MB | 1 年前3
PlantUML 1.2019.9 Справочное руководство по языку"inner process 1" <<$businessProcess>> as src rectangle "inner process 2" <<$businessProcess>> as tgt src -> tgt } @enduml 6.11 Skinparam Вы можете использовать команду skinparam для изменения шрифтов и цветов0 码力 | 173 页 | 1.97 MB | 1 年前3
共 360 条
- 1
- 2
- 3
- 4
- 5
- 6
- 36













