为了熟悉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
效果图:
发送:
发送:
服务器端打印出的日志:
至此基本的聊天功能实现了。顺便说下,以上的服务器端程序将监听到的socket连接交由单独的进程处理了。
还有不足就是客户端退出时会引发服务器端异常退出,这个需要对socket连接断开进行处理,下一步对这个进行修改。
分享到:
相关推荐
附有需求文档,设计文档,以及一些说明文档,简单的聊天室功能,适合初学者阅读,是本人学习erlang过程中写的,参照了rabbitMQ的核心模块
erlang 聊天室源代码,初学者项目,花了两周时间完成,其中设计参考的是著名聊天软件rabbitMQ 的部分模块
基于erlang的简易聊天室,主要技术是通过gen_tcp和gen_servere实现的
此项目由本人入门Erlang过程中编写,前期了解Erlang这门语言如何使用Socket和进程的调用,以及各种Erlang的语法和函数式编程的一个大致了解,可以用于入门参考参考,个人见解,希望大家也可以从我的代码当中发现问题...
erlang -c语言程序接口.pdferlang -c语言程序接erlang -c语言程序接口.pdf口.pdf
erlang 程序设计 源码 erlang 程序设计 源码 erlang 程序设计 源码erlang 程序设计 源码
erlang程序设计 的相关代码例子程序,比较多了,希望对有需要的童鞋有帮助
里面包含Server端Erlang代码和Client端JAVA代码。编写过程在我博客里。
书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。...
erlang程序设计 erlang入门手册
Erlang程序设计,包含完整目录和全套源码
[Erlang程序设计]源代码,包括了erlang程序设计一书全部实例代码;
进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。
Erlang程序设计(第2版).pdf 高清带目录。 .
Erlang程序设计 第2版 Erlang程序设计 第2版Erlang程序设计 第2版
Erlang程序设计中文版 完整书签 erlang programming
erlang发明者写的书。erlang/otp一种高可靠性的平台。
erlang程序设计第二版习题答案 ,是我自己写的习题解答,也对照过网上的一些答案,相对来说是更加简洁和符合题意的解答,不过后面几章因为时间问题没有写完,有问题或者意见可以私信找我。
Joe Armstrong [Erlang程序设计].中文版 和随书源代码 一本不错的Erlang学习书籍!