一种大规模sip server架构的实现-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1235620
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: linux

2010-07-24 21:42:35

多年来做sip终端比较多,服务器一般直接采用asterisk。
最近,做一个通信产品的整合,把桌面im, webim,voip,call center等合到一起。这时有时候从整体上考虑一下这些产品的相关性。个人发现,其实,sip架构就是一个im,甚至,现代的im的功能和复杂性都远超sip。那为什么im的产品非常多,而sip的server确一直都在抄开源项目吗?感觉,有点对sip过于神化了,其实,完全可以用普通的方法实现一个大规模的server。拿以前做过的一个项目来说:

1 linux下使用udp select 模型(连epoll都用不到,压力测试单机轻松过万)。
2 终端发register,server验证用户名,口令,成功后创建一个cuser对象,追加到user map中, 返回200 ok(演示代码,暂不考虑180)。
3 如果该用户名口令已经存在,删掉原来的,重新生成一个cusr 对象。
4 终端每30秒发一个保活包。
5 对user map保活操作,每30秒轮循查cuser,超时做相关处理。
6 终端发invite,server创建一个session对象,加到session map中。session中包含各种状态机。
7 如果支持穿透nat,转发invite时,由session负责协调,在sdp中带上源终端音视频的外网ip和端口。
8 session map也做保活,每一条命令转发后,超时做相关处理。
9 协商成功,转发rtp数据,或双方直接点对点。
10 会话完成,终端 发bye,从map中删掉该 session
11 终端 发unregister,从map中删掉user


asterisk代码把所有的逻辑处理都放在一个.c里,这一个.c代码超过2万行,现在想起来看代码的时候还心有余悸。其实,如果做个简单一些的sip proxy,不考虑全面兼容市面上的硬件设备,完全可以按上面的流程自己实现一个。至少,上面的udp通信,用户管理和会话管理,比asterisk方便的多,也更容易维护。至少可以解决不同终端用同一账号同时在线,测试过很多视频会议终端和voip电话终端,都有这个现象(当然卖给用户的时候,每个终端的账号都固定设置好了,不会冲突)。

阅读(4928) | 评论(0) | 转发(0) |
0

上一篇:live555在vc下编译的一种方法

下一篇:

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图