今天有一个哥们在群里问关于手机即时通讯开发的事情,然后我们就开始聊上了,对此我也发表了一些自己的看法。
大家都知道在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...
对于Maven项目,可以在pom.xml文件中添加如下依赖: ```xml <groupId>com.caucho</groupId> <artifactId>hessian <version>4.0.63 ``` 2. 创建服务端 在服务端,我们需要创建一个实现远程接口的类,并通过...
计算机管理以它自身的优越性拙见成为管理模式的主流。故销售管理系统采用计算机管理模式有其必然性。店里店外商店管理系统能够更好地帮您管理商店营业。 店里店外商店管理系统功能基本包括:店铺收款,雇员管理,...
以下几点拙见或许能为班主任提供一些思路。 首先,建立时间管理意识至关重要。班主任的工作量大且琐碎,没有良好的时间规划,容易陷入混乱。建议每天早晨或在上班途中,规划一下当天的工作,明确优先级,区分哪些...
对“孙悟空每次指认妖精唐僧最初都不相信”的一点拙见.pdf
学习嵌入式的一点点看法,我也只是菜鸟,纯粹把以前走过的弯路写出来,希望对你有点用
大家应该都知道,在Android端实现TCP长连接场景其实不多,我们最熟悉的不过推送和HTTP协议的实现(OkHttp),本文讨论的是在实现推送长连接的情况下怎么来做性能优化,下文只是我的一点拙见,有不妥之处还望指出,...
关于哈弗曼最短路径的一些程序,只是个人的一些拙见,如有错误,希望指正
这些年来,我一直在研究,学习,测试操作系统的各个方面,并尝试了解这些构建块如何一起发挥作用。 我对操作系统的兴趣可以追溯到我小的时候。 我可以说,Internet上散布着大量有关OS的信息。 以我的拙见,问题...
如标题所示,因本人为深度学习路上的新手,文章仅用于辅助个人的整理记忆,理解难免有偏差之处,都是个人拙见,如给其他同僚造成困扰,还请见谅,非常非常非常欢迎私信共同讨论,共同进步 函数名:pop() 作用:删除...
开发转做测试,有朋友的规劝亦有朋友的支持,劝我的说放弃一年半的开发经验做测试不值得,支持的说女孩子做开发太累,做测试可以轻松一下,而我就是决定的事,就一定...原以为测试工作会比开发简单一些,最起码不会那么
一点有关任意两点最短路径的思考!!仅仅是个人拙见。
本文通过 分析计算机网络安全的现状,提出一些拙见。 1 计算机网络安全漏洞 1.1 成因 1.1.1 操作系统本身漏洞和链路的连接漏洞 计算机网络由于需要给用户提供各种便利,那么就需要它在操作系统上拥有一个统一 的用户...
以我的拙见,该标准将开创工程师设计企业解决方案的方式,并最终支持多个系统响应式操作的开放标准。 流处理是与 Actor 模型或 Future 组合不同的范式,因此可能需要仔细研究这个主题,直到您熟悉工具和技术。 -- ...
这个文件夹解压后你只需要把文件的位置加入到“此电脑(右键属性)——高级系统设置——环境变量——系统变量中的path”中即可使用VScode的编译运行C/C++的功能,适合小白下载并使用。 当然,为什么要做这一步呢?...
这里简单介绍一下当时的开发思路和一些个人拙见,欢迎大神指点。 首先说一下讯飞第三方的人脸识别的几个缺点:1.识别不稳定,各点坐标跳动偏差比较大,不容易捕捉;2.CPU使用率比较高,连续识别一会儿手机会明显发...
状态页一个大小不一的开源状态页网站,适合您的项目! 查看!特征静态构建的开源状态页,它是根据您在网络上看到的流行... 最好的之一是 ,但是(以我的拙见),对于静态状态页,尤其是对于刚发布的开源项目或产品,
该软件包可用于在Go中构建可观察的应用程序。 它旨在将易于使用和难以滥用的单个包装中的可观察性三大Struts统一起来。 该软件包利用了 API。 OpenTelemetry是一项伟大的计划,它汇集了所有不同的可观察性标准和API...