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