<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 閱讀(2209) 評論(8)  編輯  收藏 所屬分類: java
        yanf4j簡介,請看這里
        這里俺要介紹下用yanf4j寫個最簡單的聊天室,可以直接telnet上去聊天。請先下載common-loggingyanf4j-0.40-stable-bin.tar.gz
        聊天室嘛,肯定要維護(hù)一個聊天者聊表:
    List<Session> sessionList = new CopyOnWriteArrayList<Session>();
        用戶名讓系統(tǒng)產(chǎn)生,用戶1、2、3.....,最簡單的嘛:
    AtomicInteger userId = new AtomicInteger();
    private String generateUserName() {
            
    return "user" + userId.incrementAndGet();
        }
       
        服務(wù)端要實(shí)現(xiàn)一個處理handler,來接受用戶連接并轉(zhuǎn)發(fā)聊天消息,嗯,繼承HandlerAdapter,覆寫相應(yīng)的方法即可。當(dāng)有人連上來的時候,覆寫onSessionCreated方法:
    public void onSessionCreated(Session session) {
            sessionList.add(session);
            
    // 給session取名
            session.attach(generateUserName());
            
    // 廣播某人進(jìn)來
            broadcast(session, session.attachment() + " enter room");
        }
        當(dāng)收到聊天消息的時候,廣播給組內(nèi)成員:
        @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());
            
    // 廣播某人進(jìn)來
            broadcast(session, session.attachment() + " enter room");
        }

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

    }

        接下來我們要實(shí)現(xiàn)聊天服務(wù)器了,yanf4j實(shí)現(xiàn)TCP Server的核心類是TCPController,假設(shè)端口設(shè)為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寫個簡單聊天室  回復(fù)  更多評論   

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

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

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

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

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

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

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

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

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

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

    2008-12-01 00:23 by dennis
    @homer
    不敢當(dāng),我菜鳥一個,多謝關(guān)注

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

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

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

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

    2009-02-18 23:21 by dennis
    @菜鳥問道
    不敢當(dāng),有空會畫一個類圖結(jié)構(gòu)
    主站蜘蛛池模板: 亚洲爆乳无码专区| 男女交性无遮挡免费视频| 日本无卡码免费一区二区三区| 亚洲av片在线观看| 在线观看午夜亚洲一区| 一级毛片不卡片免费观看| 亚洲爆乳无码专区www| 亚洲不卡中文字幕| 国产精品二区三区免费播放心| 日韩精品无码免费专区午夜| 亚洲一区精品视频在线| 国产成人亚洲精品影院| aa级一级天堂片免费观看| 国产精品青草视频免费播放| 国产成人精品亚洲日本在线| 亚洲精品制服丝袜四区| 99精品视频免费在线观看| 国产成人va亚洲电影| 亚洲一区中文字幕久久| 免费又黄又爽又猛大片午夜| 亚洲成色999久久网站| 四虎影视在线永久免费观看| 99久久国产免费-99久久国产免费 99久久国产免费中文无字幕 | 亚洲人成激情在线播放| 亚洲男人av香蕉爽爽爽爽| 毛片免费观看视频| 久久国产精品萌白酱免费| 日本一区二区在线免费观看| 亚洲欧洲国产成人精品| 国产成人无码综合亚洲日韩| 国产91久久久久久久免费| 精品无码免费专区毛片| a级毛片免费全部播放| 免费无码午夜福利片69| 久久综合久久综合亚洲| 亚洲美女精品视频| 国产AV无码专区亚洲精品| 亚洲日本中文字幕天堂网| 亚洲永久精品ww47| 久久综合九九亚洲一区| 免费在线观看中文字幕|