今天有一个哥们在群里问关于手机即时通讯开发的事情,然后我们就开始聊上了,对此我也发表了一些自己的看法。
大家都知道在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协议,这样可以确保服务器能够收到而且也省了很多麻烦。
当然这个想法应该不是我第一个想到的,也许已经有一些公司尝试过了,或者已经有成熟的产品在运用,还是请大家多多拍砖 呵呵。
分享到:
相关推荐
现今我对系统及软件配置拙见: (以下仅为"本人"个人习惯 如若读者自己有对相应系统及软件配置的习惯 爱好当然可以根据自己习惯 爱好相应配置) 首先当然是电脑硬件的购买安装配置(如下台式机配置) 1...
计算机管理以它自身的优越性拙见成为管理模式的主流。故销售管理系统采用计算机管理模式有其必然性。店里店外商店管理系统能够更好地帮您管理商店营业。 店里店外商店管理系统功能基本包括:店铺收款,雇员管理,...
班主任工作如何忙而不乱之拙见.doc
对“孙悟空每次指认妖精唐僧最初都不相信”的一点拙见.pdf
学习嵌入式的一点点看法,我也只是菜鸟,纯粹把以前走过的弯路写出来,希望对你有点用
NULL 博文链接:https://aokunsang.iteye.com/blog/681720
大家应该都知道,在Android端实现TCP长连接场景其实不多,我们最熟悉的不过推送和HTTP协议的实现(OkHttp),本文讨论的是在实现推送长连接的情况下怎么来做性能优化,下文只是我的一点拙见,有不妥之处还望指出,...
关于哈弗曼最短路径的一些程序,只是个人的一些拙见,如有错误,希望指正
这些年来,我一直在研究,学习,测试操作系统的各个方面,并尝试了解这些构建块如何一起发挥作用。 我对操作系统的兴趣可以追溯到我小的时候。 我可以说,Internet上散布着大量有关OS的信息。 以我的拙见,问题...
如标题所示,因本人为深度学习路上的新手,文章仅用于辅助个人的整理记忆,理解难免有偏差之处,都是个人拙见,如给其他同僚造成困扰,还请见谅,非常非常非常欢迎私信共同讨论,共同进步 函数名:pop() 作用:删除...
开发转做测试,有朋友的规劝亦有朋友的支持,劝我的说放弃一年半的开发经验做测试不值得,支持的说女孩子做开发太累,做测试可以轻松一下,而我就是决定的事,就一定...原以为测试工作会比开发简单一些,最起码不会那么
一点有关任意两点最短路径的思考!!仅仅是个人拙见。
本文通过 分析计算机网络安全的现状,提出一些拙见。 1 计算机网络安全漏洞 1.1 成因 1.1.1 操作系统本身漏洞和链路的连接漏洞 计算机网络由于需要给用户提供各种便利,那么就需要它在操作系统上拥有一个统一 的用户...
介绍去掉小箭头的几种常用方法,有常用的,也是一些拙见,望能采纳,呵呵
计算机管理以它自身的优越性拙见成为管理模式的主流。故销售管理系统采用计算机管理模式有其必然性。 本系统是为各位网店销售人员作出明确指导工作而设计的。目前处于草稿状态,仅供开发人员、设计人员作为参考。
以我的拙见,该标准将开创工程师设计企业解决方案的方式,并最终支持多个系统响应式操作的开放标准。 流处理是与 Actor 模型或 Future 组合不同的范式,因此可能需要仔细研究这个主题,直到您熟悉工具和技术。 -- ...
这个文件夹解压后你只需要把文件的位置加入到“此电脑(右键属性)——高级系统设置——环境变量——系统变量中的path”中即可使用VScode的编译运行C/C++的功能,适合小白下载并使用。 当然,为什么要做这一步呢?...
3389端口是指windows系统中的远程桌面端口,可以使用它本管理远程计算机,就像操作本地的电脑一样,但是也容易被一些黑客利用,所以对于这个端口我必须要修改,且必须在安装完系统后就马上修改它。 随着云主机的普及...
前端微服务化一直是前端社区的一个热门话题,早在...下面简单分享下本人对前端微服务的一些拙见。 前言 目前的前端技术,大部分是基于JavaScript栈极其衍生的技术栈体系。从当年被人戏称为“玩具语言”发展到今
状态页一个大小不一的开源状态页网站,适合您的项目! 查看!特征静态构建的开源状态页,它是根据您在网络上看到的流行... 最好的之一是 ,但是(以我的拙见),对于静态状态页,尤其是对于刚发布的开源项目或产品,