`
lvmlvy
  • 浏览: 44543 次
社区版块
存档分类
最新评论

[转]thrift java多线程非阻塞同步/异步调用实例

    博客分类:
  • java
 
阅读更多

server端代码:

public class Server {  
    public final static int PORT = 8989;  
  
    @SuppressWarnings({ "rawtypes", "unchecked" })  
    private void start() {  
        try {  
            TNonblockingServerSocket socket = new TNonblockingServerSocket(PORT);  
            final Hello.Processor processor = new Hello.Processor(new HelloImpl());  
            THsHaServer.Args arg = new THsHaServer.Args(socket);  
            // 高效率的、密集的二进制编码格式进行数据传输  
            // 使用非阻塞方式,按块的大小进行传输,类似于 Java 中的 NIO  
            arg.protocolFactory(new TCompactProtocol.Factory());  
            arg.transportFactory(new TFramedTransport.Factory());  
            arg.processorFactory(new TProcessorFactory(processor));  
            TServer server = new THsHaServer(arg);  
            server.serve();  
            System.out.println("#服务启动-使用:非阻塞&高效二进制编码");  
        } catch (TTransportException e) {  
            e.printStackTrace();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    public static void main(String args[]) {  
        Server srv = new Server();  
        srv.start();  
    }  
}  

 client端代码:

 

public class Client {  
    public static final String address = "127.0.0.1";  
    public static final int port = 8989;  
    public static final int clientTimeout = 30000;  
  
    public static void main_syn() {  
        TTransport transport = new TFramedTransport(new TSocket(address, port, clientTimeout));  
        TProtocol protocol = new TCompactProtocol(transport);  
        Hello.Client client = new Hello.Client(protocol);  
  
        try {  
            transport.open();  
            System.out.println(client.helloString("larry"));  
  
        } catch (TApplicationException e) {  
            System.out.println(e.getMessage() + " " + e.getType());  
        } catch (TTransportException e) {  
            e.printStackTrace();  
        } catch (TException e) {  
            e.printStackTrace();  
        }  
        transport.close();  
    }  
  
    public static void main_asy() throws Exception {  
        try {  
            TAsyncClientManager clientManager = new TAsyncClientManager();  
            TNonblockingTransport transport = new TNonblockingSocket(address, port, clientTimeout);  
            TProtocolFactory protocol = new TCompactProtocol.Factory();  
            Hello.AsyncClient asyncClient = new Hello.AsyncClient(protocol, clientManager, transport);  
            System.out.println("Client calls .....");  
            MyCallback callBack = new MyCallback();  
            asyncClient.helloString("larry", callBack);  
  
            while (true) {  
                Thread.sleep(1);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
      
    public static void main(String[] args) throws Exception {  
        main_asy();  
    }  
}  

public class MyCallback implements AsyncMethodCallback<helloString_call> {  
  
    // 返回结果  
    @Override  
    public void onComplete(helloString_call response) {  
        System.out.println("onComplete");  
        try {  
            System.out.println(response.getResult().toString());  
        } catch (TException e) {  
            e.printStackTrace();  
        }  
    }  
  
    // 返回异常  
    @Override  
    public void onError(Exception exception) {  
        System.out.println("onError");  
    }  
  
}  

 

 

转自:http://blog.csdn.net/larrylgq/article/details/7497342

分享到:
评论

相关推荐

    Thrift入门及Java实例演示

    这涉及到了网络通信和异步/同步调用的概念。 7. **测试**:文件"test"可能包含了一些测试用例,用于验证服务功能是否正常。这涉及到单元测试和集成测试的方法。 8. **vmdms**:这个文件名可能指的是虚拟多点分布式...

    Java Thrift demo例子

    同时,Thrift还提供了异步处理、多线程等高级特性,以应对更复杂的场景。 通过这个Java Thrift Demo,我们可以深入理解Thrift如何在Java中实现RPC通信,包括服务定义、代码生成、服务端实现、客户端调用等关键步骤...

    基于thrift开发的客户端和服务端

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并贡献给了Apache基金会。...Thrift还提供了许多优化功能,如多线程处理、异步调用和高级数据序列化选项,使得它成为构建分布式系统时的一个强大工具。

    C++(Qt)下的thrift的使用示例

    在Qt中,可以使用QThread或者Qt的并发框架(如QFuture、QtConcurrent)来处理Thrift服务的异步调用,以避免阻塞UI。同时,Qt的网络模块(如QTcpServer和QTcpSocket)可以用来建立和管理网络连接。 在实际开发中,你...

    thrift例子

    7. **线程模型**:Thrift提供了多种服务器实现,如单线程、多线程和异步模式。在实际应用中,需要根据服务的负载和性能需求选择合适的线程模型。 8. **异常处理**:Thrift支持在服务定义中声明可能抛出的异常,...

    thrift example

    Thrift服务器可以是单线程、多线程或者异步的,具体取决于应用需求和性能优化。 2. **Client Connection Pool**:客户端连接池是一种优化策略,用于管理与服务器的持久连接。通过复用已建立的连接,避免了每次请求...

    Learning Apache Thrift

    7. **并发与负载均衡**:Thrift 支持多线程和异步处理,可以轻松地实现高并发的服务。同时,通过配合负载均衡器,可以实现对多个服务器实例的负载分发,提高系统整体的可用性和响应速度。 8. **安全性**:虽然...

    java 手写rpc框架 rpc-server and rpc-client

    Java中的`Socket` API可以用于基本的TCP/IP通信,或者使用高效的NIO(非阻塞I/O)框架如Netty来提高性能。 - **多线程模型**:为了处理并发请求,服务器通常会使用线程池。线程池的配置如核心线程数、最大线程数、...

    Thrift的安装方法和简单实例

    3. TNonblockingServer:多线程非阻塞服务器,基于事件驱动,更高效地处理大量并发连接,但需要 libevent 和 libevent-dev 库。 4. TThreadedSelectorServer:类似于 TNonblockingServer,但在多线程环境中运行,...

    C# 利用Thrift 快速读写Cassandra数据库

    - **并发控制**:使用多线程或异步操作,可以并行处理多个批量写入任务,进一步提升速度。 7. **异常处理**: 在进行数据库操作时,应考虑可能出现的异常,例如网络中断、超时或权限问题。通过使用try-catch块...

    java程序员面试大纲错过了金三银四你还要错过2018吗.docx

    5. **HashMap 1.7与1.8的区别**:Java 8中`HashMap`进行了多项优化,如链表转红黑树、使用尾递归等,提高了性能和稳定性。 6. **final、finally、finalize**:`final`关键字用于声明不可变的变量或方法;`finally`...

    ThriftDemo实现客户端服务端通讯_C#_源码.zip

    Thrift提供了一些并发模式,如单线程、多线程和异步模式。 8. **调试与日志** 在开发过程中,日志记录和调试工具对于理解通信过程至关重要。Thrift提供了日志接口,可以与各种日志框架集成,帮助开发者跟踪问题。 ...

    Netty实现rpc

    Netty的非阻塞I/O模型基于Java NIO,利用`Selector`进行高效的选择和处理。 2. **RPC框架的组成**:一个完整的RPC框架通常包括服务接口定义、序列化与反序列化、服务提供者、服务消费者、负载均衡、故障恢复等组件...

    thrfit-demo

    7. **性能优化**:Thrift 设计时考虑了性能,通过高效的序列化和反序列化算法,以及对多线程和异步处理的支持,可以在高并发场景下保持良好的性能。 8. **跨平台支持**:Thrift 支持众多编程语言,包括但不限于 C++...

    C++ language framework rpc source code implementation.zip

    为了处理多个并发的RPC请求,服务器端通常需要使用多线程或异步I/O。C++11引入了std::thread和std::async等库来支持多线程编程,而Boost.Asio则提供了基于事件驱动的异步编程模型。 6. **负载均衡与服务发现**: ...

    高性能服务框架ZYS.zip

    (声明只针对多线程) echo $counter; 红包第一个参数是红包总额,第二个人参数红包数量,第三个参数默认代表拼手气红包,设置为1的话为普通红包 拼手气红包 $hongb= $obj-&gt;hongbao(10,8);或者$hongb= $obj-&gt;hongbao...

    fdbus源码下载,方便学习

    4. **线程模型**:为了提高并发处理能力,fdbus可能采用了多线程或者异步I/O模型,如epoll的边缘触发模式,来处理大量的并发连接和请求。 5. **网络通信**:fdbus使用TCP/IP作为底层通信协议,确保数据的可靠传输。...

    精通并发与 netty 视频教程(2018)视频教程

    14_Protobuf完整实例详解 15_Protobuf集成Netty与多协议消息传 递 16_Protobuf多协议消息支援与工程最佳实践 17_Protobuf使用最佳实践与Apache Thrift介绍 18_Apache Thrift应用详解与实例剖析 19_Apache Thrift原理...

    dubbo开发者文档

    - **上下文信息、隐式参数、异步调用、本地调用、参数回调、事件通知**: 这些功能为开发者提供了更多的调用方式和调用细节控制。 - **本地伪装、延迟暴露、并发控制、连接控制**: 这些是与服务暴露和调用相关的重要...

    自己写了一个RPC框架

    7. **异步调用与回调**:有些RPC框架支持异步调用,允许调用者无需等待结果即可继续执行其他任务,通过回调函数处理结果。 8. **性能优化**:如压缩传输数据、减少网络开销、多线程处理等,以提升RPC框架的效率。 ...

Global site tag (gtag.js) - Google Analytics