Erlang 聊天室程序( 一)


              為了熟悉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連接斷開進行處理,下一步對這個進行修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM