之前实现的功能相当于一个大厅,这里我们为这个聊天室程序添加“主题房间的功能”。客户端登陆后处于大厅中,然后获取目前所有的主题房间,再发送消息进入到某个房间内。同一房间的成员可见,发送的消息也只限本房间可见。
为了管理这些房间,Erlang Opt中的监控树是最合适的。
新建一个模块room_manager.erl 其行为遵守gen_supervisor,子进程为chat_room
再添加一个方法用于启动这个supervisor
如果现在就直接启动这个模块是没有问题的,但既然是主题房间,肯定不止一个吧。下面就为这个supervisor添加再启动主题房间的功能:
就这么简单? 肯定不是。还有以下几点需要考虑:
1.如何标识每个房间的信息,如名称、类型、编号、启动时间、当前用户数等。
2.如何维护每个房间的在线用户信息。
3.如何维护当前可用的主题房间的信息。
4.如何从大厅进入房间。
5.如何从房间退出到大厅。
6.如何将信息路由到自己所在的房间。
下面就一个一个地解决:
房间的标识:
如上代码启动主题房间的时候传入了Para参数,可以通过这个参数来初始化任何你需要的房间信息。PS: 这就是Erlang 的好处之一啊
修改chat_room.erl
定义一个record叫roominfo
用传入进来的参数初始化房间信息
每个房间的在线成员信息维护:
还记得client_manager这个模块否?这个模块就是用来专门管理房间对应的在线成员的,这里需要对其进行修改。
在前面的代码中client_manager这个模块的调用是与chat_room处于同一进程内的,也就是顺序性调用。
每次调用时所操纵的表是写死的,在这里需要改为动态的,在每次操纵时传入要操纵的表。
所以应该在chat_room中保存自己拥有的表名。
修改roominfo的定义添加tablename,并在初始化chat_room时生成好。
修改client_manger.erl为每个方法都添加table参数。
再修改chat_room.erl中调用部分,为每个调用都添加table参数。
如此即可。注:client_manager有一个getNick/1 函数,负责返回对应ID用户的昵称。如何从正确的表格中找出用户的昵称?这个问题将留在用户消息路由部分去处理。
暂时到这。
分享到:
相关推荐
erlang-sd_notify-1.0-2.el7.x86_64.rpm
esl-erlang_16.b.3-2~centos~6_amd64.rpm
erlang-erts-19.3.6.4-1.el7.x86_64.rpm
**Erlang聊天室源码解析** Erlang是一种面向并发的编程语言,因其在分布式系统和高可用性服务中的出色表现,常被用于构建消息队列如RabbitMQ这样的项目。本篇将深入探讨一个基于Erlang实现的简单聊天室源码,帮助...
erlang-crypto-19.3.6.4-1.el7.x86_64.rpm
3. **聊天室房间管理**:可能有多个聊天室,用户可以选择加入或退出。这就需要一个房间管理模块来维护用户与房间的关系,以及管理各个房间的消息流。 4. **实时通信**:为了实现实时交互,可以使用Erlang的TCP/UDP...
erlang-jinterface-19.3.6.4-1.el7.x86_64.rpm
linux CentOs7 下安装RabbitMq所需文件 rabbitmq-server-3.10.0-1+erlang-23.3.4.11+socat-1.7.3.2 亲自测试 可以使用
### Erlang Supervisor Behaviour详解 #### 一、Erlang Supervisor简介与作用 Erlang Supervisor是Erlang四大Behaviour之一,主要负责管理监控树(supervision tree)中的子进程,确保系统的稳定运行。在Erlang...
erlang-xmerl-22.2.5-1.el7.x86_64.rpm 免费下载0积分镜像下载。rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和...
最新最全rabbitmq与erlang版本匹配-2020-04-23
rpm包; 包含erlang-23.3-rabbitmq-server-3.8
esl-erlang_24.2.1-1_centos_7_amd64.rpm
erlang-rpm-macros-0.1.4-1.el7.noarch.rpm
error: /tmp/esl-erlang_26.0.2-1~alinux~3_x86_64.rpm : not an rpm package (or packape manifest): arning: /tmp/rabbitmg-erver 3.12.4-1 all.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY ...
erlang-xmerl-22.2.6-1.el7.x86_64.rpm 免费下载0积分镜像下载。rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和...
erlang-xmerl-22.2.4-1.el7.x86_64.rpm 免费下载0积分镜像下载。rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和...
erlang-cosFileTransfer-19.3.6.4-1.el7.x86_64.rpm
maven-erlang-plugin-1.0.0-beta-sources.jar
esl-erlang_25.0.3-1_centos_7_amd64.rpm erlang_25.0.3-1 rpm用于rabitmq基础环境安装