Erlang 聊天室程序( 一)

摘要:
为了熟悉Erlang的套接字编程开始编写一个“聊天室”程序。目前包括以下几个模块:echatServer.erl:服务器端程序启动模块。chat_room.erl:聊天室模块,一个gen_server负责处理客户端请求,保存了所有客户端的连接信息。id_generator.erl:负责为每一个连接的客户端生成唯一IDclient_session.erl:与客户端socket绑定的gen_server回调模块,接收和发送消息chat_acceptor.erl:负责监听端口和处理连接的客户端socket代码如下:echatServer.erl:-module.%%%%Includefiles%%%%%%ExportedFunctions%%-export.%%%%APIFunctions%%start()-˃chat_room:start_link(),chat_acceptor:start,ok.chat_room.erl:%%Author:Administrator%%Created:2012-2-18%%Description:TODO:Adddescriptiontochat_room%%1.genPidforeveryclientconnection%%2.broadcastmessagetoallclientSessions-module.-behaviour.%%%%Includefiles%%-include.-include.-record.%%%%ExportedFunctions%%-export.-export.%%%%APIFunctions%%start_link()-˃gen_server:start_link({local,?

为了熟悉Erlang的套接字编程开始编写一个“聊天室”程序。基本流程如下:

1.服务器启动监听指定端口

2.启动一个gen_server 作为聊天室进程,里面使用ets 保持当前所有客户端连接信息,并负责将某个客户端的消息广播到所有在线客户端

3.服务器接受客户端连接,并绑定到一个gen_server进程

4.客户端维护进程接受客户端发送的消息,调用聊天室进程函数进行广播

5.客户端维护进程接受聊天室发送的消息,转发给客户端

客户端信息包括id、pid、socket、nickname、sex、age、province 等。

目前包括以下几个模块:

echatServer.erl :服务器端程序启动模块。

chat_room.erl :聊天室模块,一个gen_server负责处理客户端请求,保存了所有客户端的连接信息。

id_generator.erl:负责为每一个连接的客户端生成唯一ID

client_session.erl:与客户端socket绑定的gen_server回调模块,接收和发送消息

chat_acceptor.erl:负责监听端口和处理连接的客户端socket

代码如下:

echatServer.erl:


chat_room.erl: id_generator.erl:
client_session.erl:
chat_acceptor.erl:

为了测试这个服务器程序,我用JAVA写了个简单的client端程序,如下:

MainForm.java


SocketClient.java


测试方法:

启动服务器端:

>echatServer:start().

启动两个客户端:

run as java Application

效果图:

Erlang 聊天室程序( 一)第1张

发送:

Erlang 聊天室程序( 一)第2张

Erlang 聊天室程序( 一)第3张

发送:

Erlang 聊天室程序( 一)第4张

服务器端打印出的日志:

至此基本的聊天功能实现了。顺便说下,以上的服务器端程序将监听到的socket连接交由单独的进程处理了。

还有不足就是客户端退出时会引发服务器端异常退出,这个需要对socket连接断开进行处理,下一步对这个进行修改。

免责声明:文章转载自《Erlang 聊天室程序( 一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ArcGIS 基础1-打开地图文档并浏览登录功能测试总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 聊天室(一)

         为了提高自己在Android开发上的能力,博主决定写一个类似于QQ、微信的聊天软件。不过,简单的想想之后发现,要实现这样的一个聊天软件,需要学习和掌握的东西还很多。作为一个Android开发的小白,也没有足够的实力能很快对这个APP的开发有很大的突破。          于是,博主参考《疯狂Android讲义》中关于“Android网络...

Rabbit MQ安装配置及常见问题

Window安装 1:RabbitMQ安装 1.1:安装Erlang:http://www.erlang.org/ 1.2:安装RabbitMQ:http://www.rabbitmq.com/download.html 1.3:window 平台配置参考:https://github.com/ServiceStack/rabbitmq-windows 1...

如何制作一个简易的web聊天室(思路)

在这里我先把自己的思路分享一下:   聊天室的静态资源如聊天室的外观一类,使用静态的html直接编写。   聊天消息则通过ajax去数据库读取并动态输出在页面上,同时设置好定时函数 ,让数据聊天消息在固定周期内不断刷新,这样就实现了聊天室数据的实时更新,注意的是在每次重新输出聊天消息时,要把之前的的消息清除,否则会出现消息的重复。   最后就是发送功能,放...

Windows下安装RabbitMQ

今天正好给自己机器安装rabbitmq,总结下安装经验。 现在国内访问erlang,和RabbitMQ官网好像都很难连上。我已下载好了资源,需要的朋友可以下载。 链接: https://pan.baidu.com/s/1nuPk4NR 密码: ge7z 1.Windows下安装RabbitMQ需要以下几个步骤 1)安装erlang。RabbitMQ服务端代...

CentOS8安装RabbitMQ3.8.16

之前安装过旧版的RabbitMQ和Erlang,先卸载。 ①:卸载RabbitMQ/sbin/service rabbitmq-server stop yum list | grep rabbitmq yum -y remove rabbitmq-server.noarch rm -rf /var/lib/rabbitmq ②:卸载Erlangyum li...

erlang 应用获取系统参数

很多时候,我们的程序需要一些预定义的参数,比如上次说的tcp_server的例子 一般参数有几种途径,具体参考这里http://blog.yufeng.info/archives/2852 app里面,env字段,比如,我们的tcp_server_app.src {application, tcp_server, [ {description,...