`
wenbin151
  • 浏览: 31551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SharedObject多人聊天

阅读更多
前面做的那个是单对单聊天室,其原理是每个连接到此服务的人都会被服务器记录在一个HashMap里,并且具有一个唯一的id。聊天的时候呢,向服务器传递2个参数(to_id,msg),然后服务器找到相应的连接,调用客户端函数,并且把(from_id,msg)传递过去,这样实现的。在线用户列表原理也类似,每次有人连接/断开都会激活服务器事件,调用客户端函数刷新列表。

这样子来做多人聊天不是不可以,不过当同时在线人数比较多的时候,效率很低下;而且,在线游戏里这样也是不现实的,因此,我们最好采用专有的sharedObject来做。

中文资料很少、公开的代码也很少、官方例子里的代码架构很复杂,于是乎研究效率不高,不过终归还是有所突破的,因为google上搜索“red5 sharedobject 服务器端代码”很多结果指向:冰山上的播客 ,那么我就从其中提供的有限的代码入手吧。首先我知道了,so是red5的一项基本应用(也是其他几乎所有流媒体服务器的基本功能),也就是说直接调用功能类ApplicationAdpter就可以实现需要的功能;其次我将其中的代码进行修改,运行通过。

然后就需要在前面的基础上,将在线列表改成so来实现,并且将多人聊天功能添加上,并用so来实现。

这个时候我发现自己需要一个测试工具来监视服务器状态,想了半天,突然一拍脑门,就用1对1聊天就可以了嘛,把原先的接收到客户端请求调用目标客户端程序改一下,事件触发就调程序返回状态就可以了。

现在流程变成这样:

[登录]
客户端so 连接 服务器
服务器端更新so
客户端自动同步后刷新在线列表

[聊天]
客户端生成对象
so改变
通过服务器同步到其他客户端

接下来便是实现了,稍候补奉上。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics