Tatala

RPC中间件
授权协议 Apache
开发语言 Java C#
所属分类 服务器软件、 缓存服务器
软件类型 开源软件
地区 国产
投 递 者 方宁
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

这个项目最早(2008年)是用于一个网络游戏的Cache Server,以及一个电子商务的Web Session服务。后来不断增加新的功能,除了Java还支持C#,到现在已经可以用它来开发网络游戏的服务器。等过些日子我还会开源网络游戏的服务器源码。 

关于性能,当时后台相应请求的效率是每秒10W次,现在我在自己的笔记本上测,只有一个客户端与服务器都在一个物理机上(CPU: i7-3610QM; RAM: 8G; OS: Win7-64),每秒相应12000个请求。 

tatala-client-csharp已经上传,同样在笔记本上测试,一个c#客户端一个Java服务端都在一台机器上,每秒响应22000个请求。c#客户端除了性能测试的例子还有一个演示Server推送的聊天室例子。

Tatala最大的特点是简单,性能是第二考虑能够满足大部分应用就行。因为性能可以通过增加机器得到提升,而代码简单意味着雇更少的人更快的开发。老板省钱,程序员轻松才是最重要的。 

下面是简单介绍。 

概述 
Tatala是一个简单易用的RPC中间件,并且跨语言跨平台。它将调用方法转变成字节数组(包括被调用类名,目标方法名,参数序列和返回值),在socket基础上实现客户端和服务器之间的互相通信。 

目前,Tatala支持Java的客户端与服务器端,和C#的客户端。 

特性 
* 简单易用可以快速开发和建立网络组件
* 跨语言跨平台
* 高性能和分布式
* 传输协议为短小精悍的二进制
* 支持socket长连接
* 客户端与服务器端多线程处理
* 支持异步请求
* 对于大数据支持压缩传输
* 支持服务器端主动推送消息
* 客户端程序可以捕获服务端抛出的异常,使客户端支持事务回滚
* 支持Google Protocol Buffers作为对象序列化进行网络传输
* 支持在服务端注册多个filter,在调用业务代码之前预处理传入的数据,注入业务逻辑,如权限检查等
* 能够用于跨语言的远程方法调用RPC,高性能的缓存服务器,分布式的消息服务,多人在线游戏服务器,等等

快速开始 

下载tatala.jar 包含在你项目的classpath中。

简单编程是Tatala第一考虑因素,所以用它建立RPC的方式,让开发者感觉就像调用本地普通方法一样简单。不用考虑网络,线程这些东西。

现在举一个例子,假如我们有个服务器端的服务ExampleManager接口 和 ExampleManagerImpl实现类。

ExampleManager.java

public interface ExampleManager{
    public String sayHello(int Id, String name);
} 

ExampleManagerImpl.java

public class ExampleManagerImpl implements ExampleManager{
 public String sayHello(int Id, String name) {
     return "["+Id+"]"+"Hello "+name+" !";
 }
} 


我们还需要在服务端建立一个socket服务类来部署我们的业务逻辑,在这个例子中socket服务监听端口是10001。 ExampleServer.java

public class ExampleServer {
 public static void main(String args[]) {
     int listenPort = 10001;
     int poolSize = 10;
     AioSocketServer server = new AioSocketServer(listenPort, poolSize);
     erver.start();
 }
} 

然后客户端的代码类似这样:

EasyClient.java

public class EasyClient {
    private static TransferObjectFactory transferObjectFactory;
    private static ExampleManager manager;


    public static void main(String[] args) {
        transferObjectFactory = new TransferObjectFactory("127.0.0.1", 10001, 5000);
        transferObjectFactory.setImplClass("ExampleManagerImpl");
        manager = (ExampleManager)ClientProxyFactory.create(ExampleManager.class, transferObjectFactory);


        String result = manager.sayHello(18, "JimT");
        System.out.println("result: "+result);
    }
} 

创建一个TransferObjectFactory对象,设置server端的IP地址,端口号和超时时间。设置被调用的实现类的类名,建立proxy,调用方法。当然我们需要把接口类(ExampleManager.class) 加入到客户端的classpath里。这就是建立一个Tatala RPC的所有代码,不需要任何配置文件,是不是很简单?

更多例子请看教程。 
Tatala-中文教程 

传输协议 
在客户端把调用的方法信息设置到transfer object里, Tatala把transfer object转换成字节数组并且发送给服务器。在服务器端把接收到的字节数组再还原成包含调用信息的transfer object。包括被调用类名,目标方法名,参数信息和返回类型等。Tatala 执行器获得调用信息执行目标方法。 

支持类型 
Tatala支持的参数和返回类型: 
bool,byte,short,chat,int,long,float,double,Date,String, 
byte[],int[],long[],float[],double[],String[],Serializable,Protobuf, WrapperClass 

其它描述 
需要JDK1.7,因为使用了Java AIO。 

第三方类库包括Protobuf,Log4j。 

License 
Apache License Version 2.0

  • Tatala 中文教程   概述 Tatala是一个简单易用的RPC中间件,并且跨语言跨平台。它将调用方法转变成字节数组(包括被调用类名,目标方法名,参数序列和返回值),在socket基础上实现客户端和服务器之间的互相通信。 目前,Tatala支持Java的客户端与服务器端,和C#的客户端。 特性 简单易用可以快速开发和建立网络组件 跨语言跨平台 高性能和分布式 传输协议为短小精悍的二进制 支持s

 相关资料
  • JWT 中间件 JSON Web Token(JWT) 是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 对于有效的令牌,它将用户存储进上下文,并调用下一个处理程序。 对于无效的令牌,它发送”401 - Unauthorized”的响应。 对于空的或无效的Authorization头,它发送”400 - Bad Request”。 使用 e.Use(middl

  • 调用中间件的形式为: func( name string, args []reflect.Value, context Context, next NextInvokeHandler) (results []reflect.Value, err error) { ... results, err = next(name, args, context)

  • 介绍 Laravel 中间件提供了一种方便的机制来过滤进入应用的 HTTP 请求。例如,Laravel 内置了一个中间件来验证用户的身份认证。如果用户没有通过身份认证,中间件会将用户重定向到登录界面。但是,如果用户被认证,中间件将允许该请求进一步进入该应用。 当然,除了身份认证以外,还可以编写另外的中间件来执行各种任务。例如:CORS 中间件可以负责为所有离开应用的响应添加合适的头部信息;日志中间

  • 本文将介绍 Lavas 中间件的用法。 如果您想在进入路由组件之前,执行某些统一处理,就可以考虑使用中间件了。在同构应用中,中间件可以运行在客户端,服务端或者两者兼具的场景内。在实现中 Lavas 参考了 Nuxt 的实现,通过 vue-router 的路由钩子让中间件顺序执行。 对于开发者,如果想要使用中间件,需要完成以下两步: 将编写的中间件放在项目根目录 /middlewares 文件夹下,

  • 中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出 激活:添加到Django配置文件中的MIDDLEWARE_CLASSES元组中 使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法 验证用户是否登陆示例 在应用中创建AdminLoginMiddleware.py文件 from django.shortcuts import

  • 中间件是为应用提供通用服务和功能的软件。数据管理、应用服务、消息传递、身份验证和 API 管理通常都要通过中间件。 Kafka Kafka提供分布式、高吞吐、可扩展的消息队列服务。 Elasticsearch Elasticsearch是一个基于Lucene的实时分布式的搜索与分析引擎。

  • Web框架 GoJavaNode.jsPHPPython.NETRustLuaSwift 名称 描述 Gin 一个有着更好性能的 HTTP 网络框架,支持类似于 Martini 的 API,通过以下插件实现:authz或 gin-casbin Beego 一个 Go 语言的开源、高性能网络框架,通过以下插件实现:plugins/authz Caddy 快速、跨平台的有自动HTTPS的HTTP/2

  • 中间件 Middleware is a function, which is called before route handler. Middleware functions have access to request and response objects, so they can modify them. They can also be something like a barrier