基于浏览器的即时通信系统架构设计

基于浏览器的即时通信系统架构设计

不懂就问QQ: 507143199

设计背景需求,某医院要求开发一套医疗辅助系统(2010年)

功能需求模块

医生在线答疑模块。

医疗报告通知模块。

生产环境

客户端:PC机,windows xp操作系统,IE6浏览器

服务端:三台(x86)服务器,内存24G, 硬盘空间2T,内部网络千兆口, 有固定外网IP.

开发环境

开发平台:Linux(ubuntu 14.1), windows xp

编程语言:Linux C++, JavaScript

前端框架:Extjs

开发工具:VIM

详细设计

​ 在线答疑和报告通知模块可以用即时通信的方式来解决。首了解一下即时通信的原理,就是两个客户端点对点实时交换信息,没有时延,发送完成后立即得到回应知道对方已经收到此信息。一般的网络通信都是直接使用原始的Socket或是更高层面的Tcp,Udp。但这里受限用户生产环境的要求,没法直接使用Socket,只能借助与http协议进行数据交换.基础互流程图如下:
在这里插入图片描述
单条消息格式为:
{
“form_user": “xxxx”,
“to_user”: “xxxx”,
“msg_type”: “xxxx”,"
“msg”: “xxxx”
}
登录获取消息具体操:

  1. 用户使用post请求登录WebServer服务后获取session id。
  2. 接下来携带登录的session id使用跨域的get请求连接HttpServer。
  3. HttpServer接收到请求后拿到session id去验证是否合法。
  4. 如果不合法立即回response error。
  5. 如果合法再去数据库获取此用户的消息列表,将所有发送给自已的消息一次性打包给get请求回复response。
  6. 此时浏览器收到所有的消息,根据消息类型分别在各自的模块中展示,或做出相应的动作。
  7. 处理完成后再次发送相同的跨域get请求。
  8. HttpServer如果发现没有要get的消息,Hold住连接不回response,等待30s之后超时回response timeout。
  9. 浏览器收到response后跳回7,如果8中发现有消息跳回5,即可持续获取消息。

登录发送消息具体操作:

  1. 将要发送的消息使用post请求发送到HttpServer。
  2. HttpServer获取“to_user"的connection,找到后将消息打包给"to_user"回复response,给"from_user"response发送成功。
  3. 如果"to_user"是离线状态,将消息存到数据库。等待用户登录后再来获取。

技术难点

使用到两个不同端口的url,存在跨域的问题
get: http:192.168.1.18:8081?callback=1345555555 =>(HttpSever)
post: http:192.168.1.18:80 =>(WebServer)
使用get请求半pull,半push方式来hold住http请求的连接,超时重新建立连接达到Streaming的获取消息,两个浏览器之间基本达到即时通信的目的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值