NIO網絡框架 ioserver

fmms 12年前發布 | 27K 次閱讀 Java 網絡工具包

ioserver 提供高性能,易擴展的NIO 網絡框架,相對于MINA更加輕量級,代理更容易讀懂,對于想要深入了解MINA的開發人員,這是一個不錯的學習框架,框架主要至力于解決中國市場上手機網游的服務器端程序編寫。服務器接收一個來自客戶端的整型,并加一返回給客戶端

package example;

import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import com.yz.net.IoFuture; import com.yz.net.IoHandler; import com.yz.net.IoSession; import com.yz.net.NetMessage; import com.yz.net.ProtocolHandler; import com.yz.net.IoService; import com.yz.net.impl.IoServerImpl;

public class ServerExample { public static void main(String[] args) { try { //綁定一個本機端口 IoService acceptor = new IoServerImpl(8899);

                    //設置協議處理者,可以不設置
                    acceptor.setProtocolHandler(new Protocol());

                    //設置消息處理者,一定要設置
                    acceptor.setIoHandler(new DataHandler());

                    //啟動
                    acceptor.start();

                    while(true) {
                            Thread.sleep(1000);
                    }

            } catch (Exception e) {
                    e.printStackTrace();
            }
    }


    public static class DataHandler implements IoHandler {

            @Override
            public void ioSessionClosed(IoFuture future) {
                    //TODO:當一個會話關閉后被觸發的方法

            }

            @Override
            public void messageReceived(IoSession session, NetMessage msg) {
                    //TODO:當存在協議解析類時,請按具體項目要求完成此方法
                    ExampleMessage message = (ExampleMessage) msg;

                    int returnvalue = message.getNumber() + 1;


                    ExampleMessage sendMsg = new ExampleMessage(returnvalue);

                    session.write(sendMsg);
            }


            @Override
            public void messageReceived(IoSession session, byte[] msgdata) {
                    //TODO:當沒有協議解析類時,請按具體項目要求完成此方法

            }       
    }

    public static class Protocol implements ProtocolHandler {

            @Override
            public boolean isClose() {
                    //TODO:如果需要長連接,請反回false,如果需要短連接請返回true
                    return false;
            }

            @Override
            public List<NetMessage> onData(ByteBuffer data, IoSession session) {
                    //TODO:這里負責茶房地數據進行解析,并形成一個具體的消息類

                    ArrayList<NetMessage> list = new ArrayList<NetMessage>();
                    while(data.remaining() >= 4) {
                            int number = data.getInt();
                            list.add(new ExampleMessage(number));
                    }

                    return list;
            }

    }

    public static class ExampleMessage implements NetMessage {

            private int number;

            public ExampleMessage(int number) {
                    this.number = number;
            }

            public int getNumber() {
                    return number;
            }

            @Override
            public byte[] getContent() {
                    byte[] content = new byte[4];

                    content[0] = (byte) ((number >>> 24) & 0xFF);
                    content[1] = (byte) ((number >>> 16) & 0xFF);
                    content[2] = (byte) ((number >>>  8) & 0xFF);
                    content[3] = (byte) ((number >>>  0) & 0xFF);

                    return content;
            }

    }

}</pre>

項目主頁:http://www.baiduhome.net/lib/view/home/1325829978187

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!