<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    使用yanf4j寫個簡單聊天室

    Posted on 2008-11-26 11:36 dennis 閱讀(2208) 評論(8)  編輯  收藏 所屬分類: java
        yanf4j簡介,請看這里
        這里俺要介紹下用yanf4j寫個最簡單的聊天室,可以直接telnet上去聊天。請先下載common-loggingyanf4j-0.40-stable-bin.tar.gz
        聊天室嘛,肯定要維護一個聊天者聊表:
    List<Session> sessionList = new CopyOnWriteArrayList<Session>();
        用戶名讓系統產生,用戶1、2、3.....,最簡單的嘛:
    AtomicInteger userId = new AtomicInteger();
    private String generateUserName() {
            
    return "user" + userId.incrementAndGet();
        }
       
        服務端要實現一個處理handler,來接受用戶連接并轉發聊天消息,嗯,繼承HandlerAdapter,覆寫相應的方法即可。當有人連上來的時候,覆寫onSessionCreated方法:
    public void onSessionCreated(Session session) {
            sessionList.add(session);
            
    // 給session取名
            session.attach(generateUserName());
            
    // 廣播某人進來
            broadcast(session, session.attachment() + " enter room");
        }
        當收到聊天消息的時候,廣播給組內成員:
        @Override
        
    public void onReceive(Session session, String t) {
            
    if (t.equals("quit"))
                session.close();
            
    else
                broadcast(session, 
    "[" + session.attachment() + "] say:" + t);

        }
        
    private void broadcast(Session s, String msg) {
            
    for (Session session : this.sessionList) {
                session.send(msg);
            }
        }

        廣播我們只是簡單的遍歷sessionList并send而已。完整的ChatServerHandler.java清單如下:
    package com.google.code.yanf4j.test.example.chat;

    import java.util.List;
    import java.util.concurrent.CopyOnWriteArrayList;
    import java.util.concurrent.atomic.AtomicInteger;

    import com.google.code.yanf4j.nio.Session;
    import com.google.code.yanf4j.nio.impl.HandlerAdapter;

    public class ChatServerHandler extends HandlerAdapter<String> {
        List
    <Session> sessionList = new CopyOnWriteArrayList<Session>();
        AtomicInteger userId 
    = new AtomicInteger();

       
    @Override
        
    public void onReceive(Session session, String t) {
            
    if (t.equals("quit"))
                session.close();
            
    else
                broadcast(session, 
    "[" + session.attachment() + "] say:" + t);

        }


        @Override
        
    public void onSessionClosed(Session session) {
            sessionList.remove(session);
            broadcast(session, session.attachment() 
    + " leave room");
        }

        
    private void broadcast(Session s, String msg) {
            
    for (Session session : this.sessionList) {
                session.send(msg);
            }
        }

        @Override
        
    public void onSessionCreated(Session session) {
            sessionList.add(session);
            
    // 給session取名
            session.attach(generateUserName());
            
    // 廣播某人進來
            broadcast(session, session.attachment() + " enter room");
        }

        
    private String generateUserName() {
            
    return "user" + userId.incrementAndGet();
        }

    }

        接下來我們要實現聊天服務器了,yanf4j實現TCP Server的核心類是TCPController,假設端口設為8080:

    package com.google.code.yanf4j.test.example.chat;

    import java.io.IOException;

    import com.google.code.yanf4j.config.Configuration;
    import com.google.code.yanf4j.nio.TCPController;
    import com.google.code.yanf4j.nio.impl.StringCodecFactory;

    public class ChatServer {
        
    public static void main(String[] args) throws IOException {
            TCPController controller 
    = new TCPController(new Configuration(),
                    
    new StringCodecFactory());
            controller.setHandler(
    new ChatServerHandler());
            controller.setPort(
    8080);  //端口
            controller.start();  //啟動
        }
    }

         順利完成,啟動后,telnet到8080端口,看看效果




    評論

    # re: 使用yanf4j寫個簡單聊天室  回復  更多評論   

    2008-11-26 13:00 by Arbow
    說到網絡編程的事情,最近我比較對LUA感興趣,想教教我小表弟用它來做簡單的網絡編程。
    爪哇之類的語言,雖然相比C++語法簡單不少,但是對初哥還是難了些,LUA簡明的語法還是蠻好懂的

    # re: 使用yanf4j寫個簡單聊天室  回復  更多評論   

    2008-11-26 13:07 by dennis
    @Arbow
    那你應該用ruby寫個dsl,更好懂

    # re: 使用yanf4j寫個簡單聊天室  回復  更多評論   

    2008-11-26 16:00 by mackson@vip.qq.com
    沒調試成功!能把項目出來看看嗎,

    # re: 使用yanf4j寫個簡單聊天室  回復  更多評論   

    2008-11-26 17:46 by dennis
    @mackson@vip.qq.com
    你可能沒有放common-logging的jar包

    # re: 使用yanf4j寫個簡單聊天室  回復  更多評論   

    2008-11-27 12:52 by homer
    你好厲害阿,以后多向你請教請教哦

    # re: 使用yanf4j寫個簡單聊天室  回復  更多評論   

    2008-12-01 00:23 by dennis
    @homer
    不敢當,我菜鳥一個,多謝關注

    # re: 使用yanf4j寫個簡單聊天室  回復  更多評論   

    2009-02-18 18:03 by 菜鳥問道
    偶這幾月對編程產生了業余興趣,聽說java很厲害,就學它了。語法書已經看過二本了,還行。聽說牛人都是寫框架的,路過此地看見先生的yanf4j,很好奇,下載看幾天,每個類的基本思路總算搞懂了,但是整個框架的總體思路卻怎么也看不明白,能否請先生談一下,畫個框架圖之類,讓我弄個明白?

    學 一下寫框架的思路,也好讓我這個菜鳥寫個框架,雷到那些大牛人。。

    # re: 使用yanf4j寫個簡單聊天室  回復  更多評論   

    2009-02-18 23:21 by dennis
    @菜鳥問道
    不敢當,有空會畫一個類圖結構
    主站蜘蛛池模板: 日韩午夜理论免费TV影院| av成人免费电影| 国产91免费在线观看| 国产亚洲精品美女久久久 | 亚洲日本在线观看网址| 香港a毛片免费观看| 亚洲精品免费在线观看| 久草视频在线免费看| 亚洲综合在线观看视频| 久久免费的精品国产V∧| 亚洲人成影院在线| 18禁美女黄网站色大片免费观看 | 亚洲伦另类中文字幕| 一区二区三区观看免费中文视频在线播放| 亚洲人成无码网站| 日韩免费在线视频| 久久精品国产亚洲AV麻豆网站| 99re视频精品全部免费| 亚洲乱人伦精品图片| 最新仑乱免费视频| 日韩大片在线永久免费观看网站 | 亚洲A∨无码无在线观看| 最近中文字幕大全免费视频| 亚洲国产精品久久人人爱| 女人18毛片a级毛片免费视频| 亚洲av日韩av永久在线观看| 国产成人精品日本亚洲专区 | 亚洲美女视频一区| 四虎影院在线免费播放| 午夜成人无码福利免费视频| 亚洲最大AV网站在线观看| 99久久久国产精品免费牛牛四川 | 亚洲色图综合在线| 99在线观看免费视频| 亚洲色大18成人网站WWW在线播放| 国产真实伦在线视频免费观看| xxxx日本在线播放免费不卡| 久久亚洲春色中文字幕久久久| 成人免费一区二区三区在线观看| 日日摸夜夜添夜夜免费视频| 久久精品国产亚洲AV无码娇色|