该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-29
kakaluyi 写道 troyconder 写道 做过一个类似的VoIP的项目,采用的和楼主一样的策略:Ajax轮询。
很不幸的告诉你,我们的项目失败了。后来交给别的部门改成ActiveX控件来做,具体成功与否,就不得而知了。不知你们底层的VoIP服务器怎么实现的,我们的是C写的,曾经我有个这种想法:用Java和C建立Socket连接,在返回给Web页面,这样效率和资源都可以解决了,但是我的想法没有试验,也没有机会了,希望楼主可以试试。 另外当初我们在做实时监控这一块的时候也考虑过很多,最后采用的Ajax轮询,感觉效率很低。网上查的很多推的技术实现好像本质上都是轮询,当然可能还有一些其他的实现,如保持HTTP的长连接等等。楼主可以自己研究研究。 这里给楼主推荐一个:pushlet,还有DWR等框架也都有推技术的实现。 P.S.补充一下,楼主做应用服务器的群集意义不是特别大,就目前楼主的情况来看,DB服务器的压力更大,实时数据库肯定是不用考虑了(成本太高),楼主就从缓存实现吧。我的思路是:在会议建立之前,所有有关的数据,包括与会人员的数据等等,都缓存到内存中,会议结束以后在进行一次性持续化。这个思路的弊端很明显:内存中有可能会面临不可预料的错误,数据丢失。楼主仔细斟酌。 是的我们底层MediaServer是用c写的,上层通过转发Sip消息来控制底层的处理视频流程, 长连接个人感觉和轮询没有太大的区别,用Socket+c感觉行的通,不过应该Web要用applet来通信可以最大限度的实现实时性,否则c+socket得到的数据,还是要靠ajax轮询来查询啊呀 内存数据库新增加了正在用,确实优化了性能,不过不可预知的错误不知道朋友你指的是指哪块。 比如内存错误,意外断电等等,这种错误也许发生的机率很低,如果对安全性要求不是特别高的话,可以不做考虑。 采用Socket的方法,我的考虑是采取某种机制,保持住HTTP连接。 |
|
返回顶楼 | |
发表时间:2009-06-29
搞得这么复杂。。。
请个人把客户端控件socket搞定怎么玩都行。。 |
|
返回顶楼 | |
发表时间:2009-06-29
|
|
返回顶楼 | |
发表时间:2009-06-29
你牛!
啥系统能顶的住每2秒就一次的数据库查询?!你想想假如是10个人 一分钟就是300次的轮番轰炸!就算是优化的再完美也抗不住哦。“推”和“拉”对数据库都会存在影响,目前涉及这方面的 用flash的比较多,你可以看下GMAIL的实现方式。 |
|
返回顶楼 | |
发表时间:2009-06-30
为什么不是Flash,flex去实现这个,adbobe有成熟的产品可以用吗。。
当然自己开发更好。。。 |
|
返回顶楼 | |
发表时间:2009-07-01
觉得都要靠数据库查询来维护状态什么的,这些东西太可怕了。你们系统设计阶段的数据结构是做什么的?为什么不能在用户登录和退出的时候触发事件,维护内存中的数据结构,完全可以把在线用户和用户状态动作做到一个数据集中。
|
|
返回顶楼 | |
发表时间:2009-07-01
liu0107613 写道 为什么不是Flash,flex去实现这个,adbobe有成熟的产品可以用吗。。
当然自己开发更好。。。 怎么没有,Adobe Acrobat Connect Pro http://www.adobe.com/products/acrobatconnectpro/ |
|
返回顶楼 | |
发表时间:2009-07-01
shinkadoki 写道 觉得都要靠数据库查询来维护状态什么的,这些东西太可怕了。你们系统设计阶段的数据结构是做什么的?为什么不能在用户登录和退出的时候触发事件,维护内存中的数据结构,完全可以把在线用户和用户状态动作做到一个数据集中。
我接触过的电信级系统,一般都避免直接操作数据库,即使是要记录到数据库中的,都先写入文件,之后再由另外一个进程从文件写入到数据库。他们这把数据库用的挺带劲的呢。 |
|
返回顶楼 | |
发表时间:2009-07-02
kakaluyi 写道 恩,我举个其中查询某张与会者表的例子,xxx进入退出会议这样设计的:
一个会议邀请用户进入会议后会存入与会者信息到数据库的参与者列表,然后进入会议后查询数据库和原来的会议用户缓存的比较,轮询时候如果有变化则通知客户端更新会议xxx进入会议什么的,然后刷新缓存,因为会议很复杂还有投票啊,聊天之类的一些功能,所以七张表应该可以理解吧 呵呵 我前端时间做了一个B/S的im即时聊天系统,你说的问题我可以谈几点自己的看法:1 对于刷新在线用户方面。 用户登录后我们是放在session里面的,所以定时去服务器取变化的用户的时候是不需要读表的。 2 接收方面。 我们初始化的时候开辟单独的线程管理,当没有新消息发送时我们线程处于阻塞状态。 |
|
返回顶楼 | |
发表时间:2009-07-02
看楼主的应用环境,用ajax轮询的试不适合,这可以说是一个硬伤
如果想在现有架构上优化,可以针对不同瓶颈采取不同措施,比如服务器集群,数据库读写分离,数据缓存...... |
|
返回顶楼 | |