开发一个手机IM系统的想法有很久了,最先我定位于基于xmpp协议的实现方式,为此我安装了Openfire和spark,搭建了一套完善的系统用于研究,spark的debug模式对我分析xmpp协议起到了重要的作用,随后我又安装了agsxmpp sdk,在一番折腾下我终于完成了agsxmpp示例客户端与spark客户端的通讯(Openfire有些地方不是100%实现了xmpp协议)。有兴趣的朋友可以看我《agsxmpp与Openfire联通》这篇文章。后来我又用过ejabberd作为服务器,ejabberd挺好的,没怎么摆弄就能顺利的和我的客户端相连。但下面这些问题始终无法解决,让我退却了,

1.基于xmpp协议的服务器都不提供用户花名册的功能,用其变通方式的花名册功能效率太低。

2.Erlang语言我研究了两天好不容易看懂了一个遍历程序,再往下看我就失去了兴趣。

3.手机上只能基于电信的CDMA连接,联通的GPRS只能用IP方式连接,移动就干脆无法连接。

于是自主开发一个基于分布式的WebIm就缓缓的萌发于我的脑海中。

随后我在网上查阅了大量的资料,随着一个问题又一个问题的提出与解决,一张又一张的流程图做出来。我脑海中的方案逐渐清晰,这里我把一些心得写一下,希望和朋友们分享。

1.Comet

  Comet是一种服务器推技术,我看了很多的介绍,大把大把的框架和协议基本把我绕晕了,我打过一阵退堂鼓,但是Comet最大的优势是节约带宽,设想一下ajax技术轮询服务器:3s一次连接,用基于Utf-8的编码来发送一个HTTP头加内容估计是200byte,8个小时的流量是:200*20*60*8=1,920,000byte,一个月就是60M,太恐怖了,这样的软件肯定没人用了。不得已逼得我继续研究Comet,后来我发现Comet就是服务器端hold一段时间,保持和客户端的连接而已,一句sleep就搞定了。当然Comet是一个整体的浏览器解决方案,而我只是借用其中的HTTP用于通信,这点还是不同的。

2.IIS最大连接数

  用sleep把线程hold住以后,我就关心IIS最多能支持多少个并发线程,这个太重要了,如果IIS只能同时并发几十个线程,那么这个方案也是没有意义的。网上找不到答案,用IIS最大连接数作为关键词搜索,只能得到卖虚拟主机的商家。于是我自己测试,把WAS打开一测,IIS只能同时连接36个线程,我顿时心凉了半截!郁闷了一天,到处找资料都没法解决,后来突然发现我系统是XP的(装xp是因为我开发蓝牙程序,只有xp的驱动),xp连接数是受限的。换到2003后马上跑出了3966个连接(一个WAS最大同时连接数了)。但还有个问题,虽然性能计数器上显示的是3966个连接,但多数线程还是处于等待状态中,又怎么办呢?

3.Web园

  想要体会3967个连接同时运行吗?打开IIS-应用程序池-属性-性能-Web园,把默认的1改成100,马上运行WAS,性能计数器上显示的是3966个连接,再打开一个IE页面,数据缓缓的显示出来,IE进度条被hold住,说明服务器端没有释放连接,同时性能计数器上显示的是3967个连接,测试成功了!


for(int i=0;i<100;i++)
{
   Response.Write(i);
   System.Threading.Thread.Sleep(3000);

}

4.Remoting

使用Web园以后,Application变量和Static变量都无法使用了。观察任务管理器,你会发现出现了很多w3wp.exe程序,每个w3wp.exe进程对应一个Web园。Application变量和Static变量都无法跨进程存在,所以进程间的通讯只能使用数据库或者Remoting了.我选择使用Remoting是因为Remoting具备双向通信和事件通知功能,这样就大大节约了系统资源。设想4000个用户在线1秒去Select一次数据库查看自己的消息,那就需要数据库0.25ms内处理完这个select。我还没有接触过这种服务器,你有用过吗?发出来眼馋一下吧。

开发分布式WebIm--1(设想)相关推荐

  1. HarmonyOS 基于JS范式的应用开发 —— 分布式拉起、迁移

    前言 对于分布式能力的接口,HarmonyOS 在 API Version 4 提供了一波,然后到 API Version 7 又提供了另一波,因此 API Version 4 的接口就不再被维护了, ...

  2. 使用c++开发分布式框架实践

    目前比较流行的分布式框架有dubbo,springcloud,JMX等,都是java实现的,但是在做c++项目时,也有分布式的需求,这时我们可以基于grpc自己设计一套分布式框架. 整体思路如下: C ...

  3. 企业项目开发--分布式缓存memcached(3)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3.3.ssmm0-data 结构: 3.3.1.pom.xml 1 <?xml version=&q ...

  4. 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建

    From: http://www.infoq.com/cn/articles/game-server-development-2?utm_source=infoq&utm_medium=rel ...

  5. 设计一个串口服务器设备.《需求分析报告》,《项目开发,分布式多串口交换服务器的设计与实现...

    摘要: 随着信息技术和物联网技术的迅猛发展,TCP/IP网络应用呈现白热化趋势,各种以TCP/IP网络为主的通信设备已经成为主流,网络似乎无处不在.这种局面使得传统的以串行通信为主要通信方式的设备逐渐 ...

  6. WINX可视化开发工具的初步设想

    以WINX界面库为开发平台 是的,WINX可视化开发工具本身,可能会成为第一个基于WINX并开源的完整应用(当然,不排除其他人比我们更早一步). 以VS2003/VS2005的插件融合到Visual ...

  7. Java学习之App开发公司手机端设想

    背景:最近在学JAVA,看到JAVA做各种APP,而公司软件主要是做家居设计,使用者多是设计师和家具门店,很难让大部分非专业人士接触到我们的产品,由于设计复杂且占用资源较多不太可能用APP实现网站设计 ...

  8. oracle分布式数据库中间件,分布式数据库中间件设想

    DB PROXY 功能 0 拥有分片数数据库和主数据库(非分片的) 1 前端SQL明文要求,并非绑定变量化,且客户端HASH成SQLID 2 前端MAXCONN限制,MAXPACKESIZE 3 返回 ...

  9. 开发分布式WebIm--3(Comet模型)

    原文是:http://www.codeproject.com/KB/aspnet/CometAsync.aspx Asp.net环境下实现Comet就要用到   IHttpAsyncHandler接口 ...

  10. 分布式医疗挂号系统(十二) | 开发医院、科室、排班接口

    开发医院.科室.排班接口 一.医院接口 查询医院接口 二.科室接口 (1)上传科室功能 (2)查询科室功能 (3)删除科室功能 三.排班接口 (1)上传排班功能 (2)查询排班功能 (3)删除排班功能 ...

最新文章

  1. pythonos pathjson_Python Json数据文件操作原理解析
  2. LLVM3.8停止了旧Windows版本,取消Autoconf,改进Clang
  3. C#控制管理VisualSVN Server
  4. 计算机基础:多媒体基础知识笔记
  5. html中视频播放完后可以跳到另一个html
  6. Kibana可视化管理页面详细使用说明
  7. 普华永道报告:三波自动化浪潮将依次出现,人类工作将显著受到影响
  8. 零基础学python还是c语言-零基础学Python之前需要学c语言吗
  9. 树(2)-----leetcode(层、深度、节点)
  10. Linux tcpdump命令详解
  11. 【idea使用】主题文字修改
  12. java 转换tif图片为jpg,解决转换后颜色异常问题
  13. 冒泡排序和鸡尾酒排序
  14. 项目验收测试是什么意思?项目检测具体流程有哪些?
  15. 汽车芯片“后短缺时代”,破局已定
  16. 项目管理铁三角:追求价值还是约束条件
  17. 人机交互及界面设计序言
  18. 想学爬虫的同学看过来,手把手教你利用Python网络爬虫获取APP推广信息
  19. 新生搜索神器Microsoft Academic Search与Google scholar、PubMed、wos、embase大PK!
  20. 视觉SLAM方案整理及摄像头选型调研(他首推ZED)

热门文章

  1. 2019矿大软件工程考试记录
  2. qq邮箱发件转发php,phpmailer 利用qq邮箱转发邮件的问题
  3. 【CityHunter】通过Unity3D来制作游戏中AR部分的内容
  4. CSS渐变背景看这一篇就够了
  5. 行列式与矩阵的初等变换总结
  6. 修改密码 的测试用例(web)
  7. 移动端获取手机网络信息
  8. 国信证券有限责任公司关于创设南航认沽权证的公告
  9. 李沐论文精读系列二:Vision Transformer、MAE、Swin-Transformer
  10. 二进制数转整数、整数转二进制数、二进制数求模