<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
    @菜鳥問道
    不敢當,有空會畫一個類圖結構
    主站蜘蛛池模板: 三年片免费观看大全国语| 男人扒开添女人下部免费视频| 亚洲成av人在线视| 自怕偷自怕亚洲精品| 国产精品亚洲午夜一区二区三区 | 永久免费av无码网站韩国毛片| 成人影片麻豆国产影片免费观看| 亚洲 综合 国产 欧洲 丝袜| 亚洲av无码专区在线播放| 亚洲成AV人影片在线观看| 国产一级淫片a免费播放口| 好男人看视频免费2019中文| 国产亚洲精品观看91在线| 亚洲日本成本人观看| 久久免费公开视频| 亚洲伊人成无码综合网 | 久久久青草青青亚洲国产免观 | 国产91在线免费| 精品亚洲aⅴ在线观看| 一级特黄特色的免费大片视频| 免费看男女下面日出水来| 又黄又大又爽免费视频| 国产成人亚洲精品| 国产精品公开免费视频| 亚洲av无码片在线观看| 久久狠狠躁免费观看2020| 亚洲一区二区中文| 中文字幕人成无码免费视频| 国产精品亚洲专区无码不卡| 在线天堂免费观看.WWW| 羞羞网站免费观看| 免费国产成人高清在线观看麻豆| 亚洲一级片免费看| 久久青青草原亚洲av无码| 国产成人综合亚洲绿色| 国产V亚洲V天堂A无码| 97无码免费人妻超级碰碰碰碰| 在线播放免费人成视频网站| www亚洲一级视频com| 99re在线精品视频免费| 久久亚洲免费视频|