ICE Chat Demo 实例分析

colorado

ICE Chat Demo 是 ZeroC 推荐的 ICE 综合实例,它实现了聊天室的基本功能。服务器端采用了C++;客户端采用了C++ / Java / C# / …… 。采用 Java Swing 和 C# WPF 演示了ICE在GUI界面下的调用方法,采用ICE提供的异步方法,可以使用户使用ICE远程功能,又能获得界面体验,而不被阻塞。

 

本人阅读了 ChatDemo 项目的C++源代码,分析了程序的流程和构造。读者可以从 ICE Chat Demo 项目官方网站 获得更多相关知识。

ChatDemo 服务器端采用两种模式:推送(Push)模式和轮询(Polling)模式。

 

推送模式:客户端在服务器上注册回调函数,然后在服务器获取消息时,调用客户端回调函数,向它发送消息。这种方式采用了Glacier2实现会话(session),程序的运行,必须要采用client -> glacier2router -> server 的部署方式。读者可以自已实现会话,就不需要Glaicer2了,但自定义会话比较麻烦,要考虑会话过期,及会话对象的回收等问题。采用这种方式的缺点是,对跨防火墙的访问,通常肯定要在C/S两端总是保持连接,一旦连接断开,必须重新连接——在本程序中没有实现自动重连接的功能。

 

轮询(Polling)模式:客户端定期调用服务器的远程接口,访问服务器存储的消息。这样服务器必须有缓冲池缓冲必要的消息,程序采用了std:vector 存储用户登录、离开及消息做为缓冲区。在极大迸发量情况下,必须要考虑缓冲区是否会溢出。这里由于客户端定期访问,每次访问都会清除存储的缓存,因此没有考虑缓冲区溢出的情况。

 

下面用简要的图示说明客户端与服务器之间的交互执行。需要读者对代码有些了解,对照查看。

 

一、推送模式:

 

1、通讯建立过程

 

2、实际通讯过程:

二、轮询模式:

1、通讯建立过程

2、实际通讯过程

 

 

本程序的分析还比较粗浅,可能还有不当之处,另外对于配置还未涉及。今后有时间继续增补、修改。

我感觉对该项目进行学习是掌握ICE基础知识非常有效的手段,希望与读者共勉。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值