`
Cindy_Lee
  • 浏览: 112017 次
  • 性别: Icon_minigender_1
  • 来自: 武汉人在北京
社区版块
存档分类
最新评论

个人对于即时通讯(推送)系统构建的一些拙见

 
阅读更多
今天有一个哥们在群里问关于手机即时通讯开发的事情,然后我们就开始聊上了,对此我也发表了一些自己的看法。

大家都知道在iphone端做及时通信很好做,因为苹果已经封装好了系统推送的接口,所有推送都是通过苹果服务器建立的那个唯一的socket连接。

但是放在android终端就有一些困难了,首先android在2.2才推出了c2dm服务,不过这个东西在中国这个地方似乎不怎么试用,首先手机的版本问题难以解决,然后就是定制化太严重。
所以对于android及时通信而言只能自己架设服务器完成这个事情了。

说道自己构建服务器就无可避免的谈到服务器负载,性能的一些问题,我首先想到的是p2p技术,这样服务器只负责打洞,可以大大的减少服务器压力。不过这一套似乎在移动终端很难实现,首先是移动终端的不稳定性,其次就是运营商对p2p做了限制,总之这条路在移动领域很难走通了。

后来有考虑用一些第三方的框架,比如android的第三方的androidpn,这些似乎服务器要求很高,一台64的linux服务器只能承载4W用户,即时最大优化也只能承载5W,那如果用户有100W不是需要20台服务器?这样对于很多公司而言都是一笔很大的成本。

然后我又思考了一下到底什么才是瓶颈,如果建立tcp长连接的话无疑是非常浪费服务器资源的,既然如此我就想到了另外的一种模式,那就是udp负责保持连接,tcp负责发送消息的模式。

大家都知道,udp不是面向连接的,所以理论上来讲一台服务器可以开无限个udp,而且udp消耗相对于tcp小,至于如何报错udp的不稳定性?我们可以把协议扩充一些比如时间戳,接收回执,失败重发,发送报文减小到一个包里面,等等.反正只作为通知用,报文不需要太大。

基于上面的理论,我假设有两台服务器一台负责udp保持连接,一台用于tcp发送消息。我们不需要tcp保持长时间连接,每次发送完成之后断开连接即可,我们甚至可以用http服务器作为消息发送容器。而udp服务器主要是用于心跳响应和通知终端去服务器取消息。

这样我们只需要测试tcp服务器最大的负载能力以及udp保持的最大连接数即可。如果是http服务器测试就更加方便了。至于服务器集群之类的我就不说了,老身长谈。


以上只是我个人的拙见,我也不是专门搞这一块的,也没有经过测试,只是我一时突发奇想,如果有什么不对的地方也请大家不要建议,也希望大家能够多多讨论。

还有一些人问我,那不如直接全部用udp不是更简单,针对这一点我想说的是,udp是不确定内容完整性的。及时通信一般传输的都是字符流,我们很难确保发出去的包都能收到,而且接收的顺序不确定性(当然也有一些扩展协议能够补充这一点),所以发送消息不如直接用tcp协议,这样可以确保服务器能够收到而且也省了很多麻烦。

当然这个想法应该不是我第一个想到的,也许已经有一些公司尝试过了,或者已经有成熟的产品在运用,还是请大家多多拍砖 呵呵。
分享到:
评论
3 楼 Cindy_Lee 2013-08-08  
ponety 写道
xmpp协议 openfire服务器可以推送,实现qq聊天一样的。


我喜欢聊原理,你喜欢聊应用。
2 楼 ponety 2012-12-17  
xmpp协议 openfire服务器可以推送,实现qq聊天一样的。
1 楼 moon198654 2012-09-25  
一台64的linux服务器只能承载4W用户,楼主测试过是吧

相关推荐

    装机-系统-软件安装顺序

    现今我对系统及软件配置拙见: (以下仅为"本人"个人习惯 如若读者自己有对相应系统及软件配置的习惯 爱好当然可以根据自己习惯 爱好相应配置) 首先当然是电脑硬件的购买安装配置(如下台式机配置) 1...

    hessian的简单使用以及拙见

    对于Maven项目,可以在pom.xml文件中添加如下依赖: ```xml <groupId>com.caucho</groupId> <artifactId>hessian <version>4.0.63 ``` 2. 创建服务端 在服务端,我们需要创建一个实现远程接口的类,并通过...

    店里店外商店管理系统演示视频+需求规格说明文档

    计算机管理以它自身的优越性拙见成为管理模式的主流。故销售管理系统采用计算机管理模式有其必然性。店里店外商店管理系统能够更好地帮您管理商店营业。 店里店外商店管理系统功能基本包括:店铺收款,雇员管理,...

    班主任工作如何忙而不乱之拙见.doc

    以下几点拙见或许能为班主任提供一些思路。 首先,建立时间管理意识至关重要。班主任的工作量大且琐碎,没有良好的时间规划,容易陷入混乱。建议每天早晨或在上班途中,规划一下当天的工作,明确优先级,区分哪些...

    对“孙悟空每次指认妖精唐僧最初都不相信”的一点拙见.pdf

    对“孙悟空每次指认妖精唐僧最初都不相信”的一点拙见.pdf

    对嵌入式的一点点拙见

    学习嵌入式的一点点看法,我也只是菜鸟,纯粹把以前走过的弯路写出来,希望对你有点用

    Android端TCP长连接的性能优化教程分享

    大家应该都知道,在Android端实现TCP长连接场景其实不多,我们最熟悉的不过推送和HTTP协议的实现(OkHttp),本文讨论的是在实现推送长连接的情况下怎么来做性能优化,下文只是我的一点拙见,有不妥之处还望指出,...

    哈弗曼问题自己的心得

    关于哈弗曼最短路径的一些程序,只是个人的一些拙见,如有错误,希望指正

    brunix:用于娱乐和学习的小型x86操作系统(正在进行中)

    这些年来,我一直在研究,学习,测试操作系统的各个方面,并尝试了解这些构建块如何一起发挥作用。 我对操作系统的兴趣可以追溯到我小的时候。 我可以说,Internet上散布着大量有关OS的信息。 以我的拙见,问题...

    【仅用于个人整理记忆】Python中列表的pop()函数用法

    如标题所示,因本人为深度学习路上的新手,文章仅用于辅助个人的整理记忆,理解难免有偏差之处,都是个人拙见,如给其他同僚造成困扰,还请见谅,非常非常非常欢迎私信共同讨论,共同进步 函数名:pop() 作用:删除...

    功能测试之拙见

    开发转做测试,有朋友的规劝亦有朋友的支持,劝我的说放弃一年半的开发经验做测试不值得,支持的说女孩子做开发太累,做测试可以轻松一下,而我就是决定的事,就一定...原以为测试工作会比开发简单一些,最起码不会那么

    两点之间最短路径C代码

    一点有关任意两点最短路径的思考!!仅仅是个人拙见。

    论文:计算机网络安全漏洞论文.doc

    本文通过 分析计算机网络安全的现状,提出一些拙见。 1 计算机网络安全漏洞 1.1 成因 1.1.1 操作系统本身漏洞和链路的连接漏洞 计算机网络由于需要给用户提供各种便利,那么就需要它在操作系统上拥有一个统一 的用户...

    Java源码企业进销存管理系统-intro-to-akka-streams:akka-streams简介

    以我的拙见,该标准将开创工程师设计企业解决方案的方式,并最终支持多个系统响应式操作的开放标准。 流处理是与 Actor 模型或 Future 组合不同的范式,因此可能需要仔细研究这个主题,直到您熟悉工具和技术。 -- ...

    小白式VScodeC/C++环境配置文件包

    这个文件夹解压后你只需要把文件的位置加入到“此电脑(右键属性)——高级系统设置——环境变量——系统变量中的path”中即可使用VScode的编译运行C/C++的功能,适合小白下载并使用。 当然,为什么要做这一步呢?...

    活体人脸识别,识别人脸,识别张嘴和摇头动作,并拍照

    这里简单介绍一下当时的开发思路和一些个人拙见,欢迎大神指点。 首先说一下讯飞第三方的人脸识别的几个缺点:1.识别不稳定,各点坐标跳动偏差比较大,不容易捕捉;2.CPU使用率比较高,连续识别一会儿手机会明显发...

    status-page:项目的开源静态驱动状态页

    状态页一个大小不一的开源状态页网站,适合您的项目! 查看!特征静态构建的开源状态页,它是根据您在网络上看到的流行... 最好的之一是 ,但是(以我的拙见),对于静态状态页,尤其是对于刚发布的开源项目或产品,

    观察者:Go应用程序的可观察性

    该软件包可用于在Go中构建可观察的应用程序。 它旨在将易于使用和难以滥用的单个包装中的可观察性三大Struts统一起来。 该软件包利用了 API。 OpenTelemetry是一项伟大的计划,它汇集了所有不同的可观察性标准和API...

Global site tag (gtag.js) - Google Analytics