`

ICE Chat Demo 实例分析

    博客分类:
  • Ice
阅读更多

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基础知识非常有效的手段,希望与读者共勉。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics