用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
1-Noah-Chen-连接世界的Python社区0 码力 | 24 页 | 2.98 MB | 1 年前3
Golang在接入层长连接服务中的实践-黄欣Golang 在接入层长连接服务中的实践 黄欣 基础平台-架构部 目录 • 背景 • 架构 • 心得 目录 • 架构 • 心得 背景—why 长连接? • 业务场景 – 大量实时计算 • 司机乘客撮合 • 实时计价 – 高频度的数据交互 • 坐标数据 • 计价数据 – App和服务端双向可达 • 上行(抢单) • 下行(派单) 背景—why golang? • 开发效率 rsp || nil So easy, So efficient 心得—coding—实现 • what’s diff? – conn svr • 常驻内存,内存中有个大连接对象map(资源问题) • 请求都是基于连接的(如果模块间存在资源的互相引用,当资源变更的情况 下,容易发生panic)(竟态问题) • 对象编程 – 封装:conn资源(包括goruntine)作为结构体封装起来,保证所有资源 statusLoop() 心得—profiling • Timer优化 • Channel使用优化 心得—timer优化 • 为什么需要优化? – 万级别的连接 – 每个连接上大量的定时任务(心跳检测,注册检测,认证检测) 实际情况:当10w左右连接,什么数据不收发,只有定时器检测心跳超时,cpu 能耗掉一个core • 怎么优化? – 特点: • 秒级别定时任务 • 范围最多60s – 方案:0 码力 | 31 页 | 1.67 MB | 1 年前3
基于 Rust 语言编写的可编程的全球分布式 MQTT 服务器 王文庭0 码力 | 31 页 | 3.95 MB | 1 年前3
Node.js Manual & Documentationwritten with Node which responds with 'Hello World': 下边是一个用 Node 编写的对所有请求简单返回'Hello World‘的 web 服务器例 子: var http = require('http'); http.createServer(function (request, response) { response the server, put the code into a file called example.js and execute it with the node program 要运行这个服务器程序,只要将上述代码保存为文件 example.js 并用 node 程 序执行此文件: > node example.js Server running at http://127.0.0 useful safety mechanism. 注意:就异常处理来说,uncaughtException 是一个很粗糙的机制。在程序中 使用 try/catch 可以更好好控制程序流程。而在服务器编程中,因为要持续运 行,uncaughtException 还是一个很有用的安全机制。 Signal Events 信号事件 function () {} Emitted when the0 码力 | 153 页 | 1.21 MB | 1 年前3
Go Web编程s 转换为 []byte 类型 c[0] = 'c' s2 := string(c) // 再转换回 string 类型 fmt.Printf("%s\n", s2) Go中可以使用+操作符来连接两个字符串: s := "hello," m := " world" a := s + m fmt.Printf("%s\n", a) 修改字符串也可写为: s := "hello" s 求 DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览 器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务,返回HTTP Response(响应)包;客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内 容随后断开与该服务器之间的TCP连接。 容随后断开与该服务器之间的TCP连接。 图3.1 用户访问一个Web站点的过程 一个Web服务器也被称为HTTP服务器,它通过HTTP协议与客户端通信。这个客户端通常指的是Web浏览器(其实手机端 客户端内部也是浏览器实现的)。 Web服务器的工作原理可以简单地归纳为: 客户机通过TCP/IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档 服务器向客户机发送HTT0 码力 | 295 页 | 5.91 MB | 1 年前3
NodeJS 中文文档 V0.2.3................................................................................39 net.Server TCP 服务器模块................................................................................................. 群:53090214 共同学习 NodeJS,欢迎加入。 3 Synopsis Synopsis Synopsis Synopsis 总述 总述 总述 总述 使用 node 实现的 web 服务器示例,它返回'Hello World': var http = require('http'); http.createServer(function (request, response) { EventEmitter EventEmitter EventEmitter EventEmitter 事件触发器 事件触发器 事件触发器 事件触发器 Node 中的很多对象都会触发事件,例如:一个 TCP 服务器在收发每个数据流时都触发事件;子进程在退出时 会触发事件。 所有能够触发事件的对象都是 events.EventEmitter 的实例。 事件命名方式使用大小写分隔的风格。例如:'stream'0 码力 | 62 页 | 542.14 KB | 1 年前3
Python3 基础教程 - 廖雪峰用记事本编辑的时候,从文件读取的 UTF-8 字符被转换为 Unicode 字符 到内存里,编辑完成后,保存的时候再把 Unicode 转换为 UTF-8 保存到 文件: 浏览网页的时候,服务器会把动态生成的 Unicode 内容转换为 UTF-8 再 传输到浏览器: 所以你看到很多网页的源码上会有类似的信息, 表示该网页正是用的 http://www.yeayee.com/ 212/531 但是如果我们想创建出类呢?那就必须根据 metaclass 创建出类,所以: 先定义 metaclass,然后创建类。 连接起来就是:先定义 metaclass,就可以创建类,最后创建实例。 所以,metaclass 允许你创建类或者修改类。换句话说,你可以把类看成 是 metaclass 创建出来的“实例”。 ARGS: ['my-pwd', 'test@orm.org', 'Michael', 12345] 可以看到,save()方法已经打印出了可执行的 SQL 语句,以及参数列表, 只需要真正连接到数据库,执行该 SQL 语句,就可以完成真正的功能。 不到 100 行代码,我们就通过 metaclass 实现了一个精简的 ORM 框架。 小结 metaclass 是 Python0 码力 | 531 页 | 5.15 MB | 1 年前3
Laravel 5.6 中文文档注:要使用这个新特性,必须使用 memcached 或 redis 缓存驱动作为应用默认缓存驱动。此外,所有服务器必须和同一个中心缓存服务器进行通 信。 如果你的应用运行在多个服务器上,现在可以限定只在一台机器上运行调度任务。例如,假设你有一个在每周五晚上生成新报告的调度任务,如果任 务调度器运行在三个服务器上,这个调度任务就会在三台机器上运行并生成同样的报告三次,这样很不优雅,甚至很糟糕! 要指定任 要指定任务只在一台机器上运行,可以在定义调度任务时使用 onOneServer 方法,第一台获取到任务的机器会给这个任务上一把原子级别的锁来阻 止其他服务器同时运行同一个任务: $schedule->command('report:generate') ->fridays() ->at('17:00') 了,但是还有很多其他的小更新比如配置文件或注释的微调,就不会一一指出。你可以通 过 GitHub 比较工具 轻松查看变更以便选择那些对你而言更为重要的更新。 二、快速入门 安装配置 服务器要求 Laravel 框架对 PHP 版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件 很遗憾的事情0 码力 | 377 页 | 14.56 MB | 1 年前3
FISCO BCOS 1.3 中文文档机构名 bash generate_agency_cert.sh -c /mydata -o /mydata -n test_agency 配置SDK证书 区块链环境搭建完成之后Web3SDK需要连接节点时需要SDK证书文件,SDK 证书需要在机构证书生成之后才能生成,我们为上面生成的机构test_agency生 成SDK证书 cd /mydata/FISCO-BCOS/tools/scripts/ /mydata/node1/genesis.json --config /mydata/node1/config.json 验证已连接 查看日志 cat /mydata/node1/log/* | grep "Connected" 看到如下日志,表示节点已经连接了其它的节点 INFO|2018-11-07 15:21:11:314|Connected to 1 peers 验证可共识 查看日志,查看打包信息 maxtx:1000,tq.num=0time:1533887334119 使用指南 区块链节点 证书说明 合约入门 系统合约 基本操作 控制台 区块链节点 节点是区块链上的执行单元。多个节点彼此连接,构成一个P2P网络,承载了 区块链上的通信,计算和存储。节点入网后(加入联盟),成为区块链上的一 个共识单位。多个节点参与共识,确保了区块链上交易的一致。 节点文件目录、分类 FISCO-BC0 码力 | 491 页 | 5.72 MB | 1 年前3
共 413 条
- 1
- 2
- 3
- 4
- 5
- 6
- 42













