基于kryonet的RPC,使用kryo进行序列化

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;
    }  

}  
时间: 2024-11-06 03:35:48

基于kryonet的RPC,使用kryo进行序列化的相关文章

基于Netty打造RPC服务器设计经验谈

自从在园子里,发表了两篇如何基于Netty构建RPC服务器的文章:谈谈如何使用Netty开发实现高性能的RPC服务器.Netty实现高性能RPC服务器优化篇之消息序列化 之后,收到了很多同行.园友们热情的反馈和若干个优化建议,于是利用闲暇时间,打算对原来NettyRPC中不合理的模块进行重构,并且增强了一些特性,主要的优化点如下: 在原来编码解码器:JDK原生的对象序列化方式.kryo.hessian,新增了:protostuff. 优化了NettyRPC服务端的线程池模型,支持LinkedBl

Java编写基于netty的RPC框架

一 简单概念 RPC: ( Remote Procedure Call),远程调用过程,是通过网络调用远程计算机的进程中某个方法,从而获取到想要的数据,过程如同调用本地的方法一样. 阻塞IO :当阻塞I/O在调用InputStream.read()方法是阻塞的,一直等到数据到来时才返回,同样ServerSocket.accept()方法时,也是阻塞,直到有客户端连接才返回,I/O通信模式如下: 图片描述(最多50字) 缺点:当客户端多时,会创建大量的处理线程,并且为每一个线程分配一定的资源;阻塞

Thrift RPC实战(三) thrift序列化揭秘

本文主要讲解Thrift的序列化机制, 看看thrift作为数据交换格式是如何工作的? 1.构造应用场景: 1). 首先我们先来定义下thrift的简单结构. 1 2 3 4 5 namespace java com.yangyang.thrift.api struct Pair { ? ? 1: required string key ? ? 2: required string value } required修饰符你肯定能猜测到它的意义, 但是你是否有没有这样的疑惑, "1",

基于protobuf的RPC实现

可以对照使用google protobuf RPC实现echo service一文看,细节本文不再描述. google protobuf只负责消息的打包和解包,并不包含RPC的实现,但其包含了RPC的定义.假设有下面的RPC定义: service MyService { rpc Echo(EchoReqMsg) returns(EchoRespMsg) } 那么要实现这个RPC需要最少做哪些事?总结起来需要完成以下几步: 客户端 RPC客户端需要实现google::protobuf::RpcCh

基于框架的RPC通信技术原理解析

RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键. 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率. 此时,用于加速前端页面开发的 Web框架(MVC) 是关键

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化

一个技术汪的开源梦 —— 目录 想必大家在项目中都接触过 JSON 或者 XML 吧,为了将对象在网络上传输或者将其持久化必须将其序列化为一个字符串然后进行后续操作.常见的就是将其序列化成 JSON 或者 XML . 大家在项目中应该都看到过这样的工具类 例如 ***XmlHelper.***JsonHelper 等,没错这一些助手类会帮助我们重复造轮子.既然是组件并且还是是开源的必须考虑每个功能的后续可扩展性以及易用性. ISerializer 序列化者接口 1 using System; 2

JMS - 基于JMS的RPC

现在试试通过JMS,在应用程序之间发送消息.先看看spring提供的RPC方案(其实还有其他方案,只是没见过谁用).需要使用到这两个类:·org.springframework.jms.remoting.JmsInvokerServiceExporter将bean导出为基于消息的服务·org.springframework.jms.remoting.JmsInvokerProxyFactoryBean让客户端调用服务 比较一下JmsInvokerServiceExporter和RmiServic

《Java 编写基于 Netty 的 RPC 框架》

一 简单概念 RPC: ( Remote Procedure Call),远程调用过程,是通过网络调用远程计算机的进程中某个方法,从而获取到想要的数据,过程如同调用本地的方法一样. 阻塞IO :当阻塞I/O在调用InputStream.read()方法是阻塞的,一直等到数据到来时才返回,同样ServerSocket.accept()方法时,也是阻塞,直到有客户端连接才返回,I/O通信模式如下: 缺点:当客户端多时,会创建大量的处理线程,并且为每一个线程分配一定的资源;阻塞可能带来频繁切换上下文,

基于Netty的RPC架构实战演练

课程目录及下载地址: 1.第一课NIO2.第二课netty服务端3.第三课netty客户端4.第四课netty线程模型源码分析(一)5.第五课netty线程模型源码分析(二)6.第六课netty5案例学习7.第七课netty学习之心跳8.第八课protocol buff学习9.第九课自定义序列化协议之自定义序列化协议10.第十课自定义数据包协议11.第十一课粘包分包分析,如何避免socket攻击12.分析设计一个聊天室的小项目 下载地址:http://www.itsource.com.cn/th