接下来实现设置客户端信息功能,使客户端可以设置自己的名称、性别、年龄、所做省份等信息。我们暂时不管客户端如何实现,先对服务器端代码进行调整。
这里需要做以下几件事:
1.修改client_session中handle_info({tcp,Socket,Data},State) 函数对接收到的消息包的处理,使其能支持“客户端信息设置消息”。
考虑到后面还会有更多种类的消息,在这里添加一个消息路由模块message_router.erl,主要负责验证收到的消息类型和主题,并最终路由到正确的消息处理模块中去。
2.将chat_room中的客户端信息管理代码独立为一个client_manager.erl,负责具体的客户端信息处理。
3.实现将message 中type=set、subject=clientinfo 的消息路由到client_manager中,并实现更新ets表中相应的字段信息,最终回复一个消息,或广播消息给所有在线用户。
代码如下:
client_session.erl
注意:在将原始json转成message后需要替换掉原来的from。
message_router.erl
注:这里只做简单的判断,后面可以考虑使用路由表的方式路由信息。
修改chat_room.erl中涉及到客户端信息操作的部分:
client_manager.erl
注:上面的client_manager.erl代码中并未实现将 #message.content 转为#clientinfo 的过程,等客户端实现后再处理,这里留个尾。
分享到:
相关推荐
【Erlang聊天室服务器及客户端代码解析】 在IT领域,Erlang是一种面向并发、分布式、容错的编程语言,特别适合构建高可用性的实时系统。本项目提供了一个使用Erlang编写的聊天室服务器端代码以及Java编写的客户端...
这两个压缩包结合使用,就可以构建一个简单的Erlang聊天室系统,用户可以通过客户端连接到服务器,进行实时的文本交流。通过阅读和理解这些代码,开发者可以学习到Erlang的并发编程技巧、网络通信以及如何实现一个...
这个轻量级的客户端库允许开发者轻松地在网页上集成即时通讯功能,无需用户下载安装任何应用程序。Converse.js与多种XMPP服务器兼容,如Openfire和ejabberd,这使得它成为构建Web聊天应用的理想选择。 **1. XMPP...
- **示例**: 设计一个简单的聊天室应用,包括客户端和服务器端。 - **功能**: - 客户端可以发送消息到服务器。 - 服务器广播消息给所有在线客户端。 - 支持用户登录和退出。 #### 四、健壮性 **1.4.1 超时 ...
- 加入`jdev@conference.jabber.org`聊天室。 - 发送邮件至`jdev@jabber.org`邮件列表(需要订阅才能发信)。 通过这种方式,开发者可以及时获得最新信息和技术支持,同时也可以为XMPP的发展做出贡献。 #### 四、...
5. **Phoenix Channels**:Phoenix Channels是Phoenix框架中的实时通信组件,它们基于WebSockets,允许在客户端和服务器之间建立多个主题频道,从而实现实时的数据交换,如聊天室中的消息传递。 6. **数据库集成**...
7. **扩展功能**:XMPP框架支持许多扩展,例如文件传输、多用户聊天室等,你可以根据需求选择添加。 在开发过程中,确保遵循Apple的iOS设计指南,提供良好的用户体验。例如,使用推送通知来提醒新消息,以及在后台...
ejabberd是一款开源的XMPP服务器,广泛应用于实时通讯系统,如即时消息、在线状态显示、多用户聊天室等功能的实现。它基于Erlang编程语言,这使得ejabberd具有高度可扩展性和高容错性。 ejabberd-15.07-osx-...
3. **模块化设计**:ejabberd通过插件系统提供丰富的功能,如多用户聊天室、外部认证机制、存储后端等,可以根据需求进行定制。 4. **API与集成**:ejabberd提供了REST API和客户端库,方便与其他系统集成,如Web...
2.5 消息通讯场景:使用 RabbitMq 可以实现点对点消息队列和聊天室效果。 RabbitMq 开发指导: 1. 配置文件:修改本地配置文件 rabbitmq.properties,设置 rabbitMQ 服务器地址、端口和用户信息。 2. 添加依赖包...
【标题】:Elixir语言构建的聊天室应用——Chat_ex 【描述】:“Chat_ex”是一个基于Elixir编程语言开发的聊天室应用示例。Elixir是一种动态类型的函数式编程语言,它运行在 Erlang VM (BEAM) 上,特别适合构建高...
它们通过 topic(主题)进行消息传递,可以用于实时推送、聊天室或在线游戏等场景。 2. **mix**:这是Elixir的构建和任务管理工具,类似于Ruby的`bundle`或Node.js的`npm`。在项目中,`mix deps.get`用于获取并安装...