kryonetのRPCに基づいて、kryoを使って序列化します。

11126 ワード

Kryoはプログレッシブフレームです。
KryonetはkryoベースのRPCフレームワークで、効率的で簡潔なAPIを実現しています。NIOを通じてTCPとUDP通信を実現しています。今はHttpをサポートしていません。
自分でテストコードを書いて、実行してみたら、いい感じになりました。記録してください。
1、listener
package com.mytestcodes.kryonet;  
  
import com.esotericsoftware.kryonet.Connection;  
import com.esotericsoftware.kryonet.Listener;  
import com.mytestcodes.serialization.fulltest.Child;  
  
public class KListener extends Listener  
{  
    public KListener()  
    {  
  
    }  
  
    public KListener(String name)  
    {  
        this.name = name;  
    }  
  
    private String name;  
  
    public void received(Connection connection, Object object)  
    {  
        System.out.println(name + " has recive a message");  
  
        if (object instanceof Child)  
        {  
            Child child = (Child) object;  
            System.out.println(child.getChildName());  
            child.setChildName(name + " response");  
            connection.sendTCP(child);  
        }  
    }  
  
    public String getName()  
    {  
        return name;  
    }  
  
    public void setName(String name)  
    {  
        this.name = name;  
    }  
  
}  
2、client
package com.mytestcodes.kryonet;  
  
  
import java.io.IOException;  
import java.nio.ByteBuffer;  
  
  
import com.esotericsoftware.kryonet.Client;  
import com.mytestcodes.serialization.fulltest.Baby;  
import com.mytestcodes.serialization.fulltest.Child;  
import com.mytestcodes.serialization.fulltest.Parent;  
  
  
public class KClient  
{  
    public static void main(String[] args)  
    {  
        Client client = new Client();  
        client.addListener(new KListener("Client"));  
        client.start();  
        try  
        {  
            client.connect(5000, "localhost", 54555, 54777);  
        } catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
  
  
        client.getKryo().setRegistrationOptional(true);  
        Child child = new Child();  
  
  
        client.sendTCP(child);  
    }  
  
  
    public static byte[] readBuf(ByteBuffer buf)  
    {  
        int size = buf.position();  
        byte[] newBuf = new byte[size];  
        for (int i = 0; i < size; i++)  
        {  
            newBuf[i] = buf.get(i);  
        }  
        return newBuf;  
    }  
} 
3、server
package com.mytestcodes.kryonet;  
  
  
import java.io.IOException;  
  
  
import com.esotericsoftware.kryonet.Server;  
  
  
public class KServer  
{  
    public static void main(String[] args)  
    {  
        Server server = new Server();  
        server.addListener(new KListener("server"));  
  
  
        server.getKryo().setRegistrationOptional(true);  
        server.start();  
        try  
        {  
            // TCP port 54555 and UDP port 54777  
            server.bind(54555, 54777);  
        } catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
    }  
}  
 
4、child:
package com.mytestcodes.serialization.fulltest;  
  
import java.io.Serializable;  
  
public class Baby implements Serializable  
{  
  
    /**  
     *   
     */  
    private static final long serialVersionUID = 8882758100866916676L;  
  
    private String babyName = "baby";  
  
    public String getBabyName()  
    {  
        return babyName;  
    }  
  
    public void setBabyName(String babyName)  
    {  
        this.babyName = babyName;  
    }  
  
}
package com.mytestcodes.serialization.fulltest;  
  
import java.io.Serializable;  
  
public class Parent implements Serializable  
{  
  
    /**  
     *   
     */  
    private static final long serialVersionUID = 6933088125784071832L;  
      
    private String parentName="parent";  
  
    public String getParentName()  
    {  
        return parentName;  
    }  
  
    public void setParentName(String parentName)  
    {  
        this.parentName = parentName;  
    }  
      
}