您的位置:首页 > 编程语言 > Java开发

RPC学习--C#使用Thrift简介,C#客户端和Java服务端相互交互

2014-08-31 22:54 826 查看
本文主要介绍两部分内容:

C#中使用Thrift简介

用Java创建一个服务端,用C#创建一个客户端通过thrift与其交互。

用纯C#实现Client和Server

C#服务端,Java客户端

其中使用到RPC学习----Thrift快速入门和Java简单示例,这篇文章创建的Java服务端。

一、C#中使用Thrift简介

关于rpc的简介,可以参考:RPC学习----Thrift快速入门和Java简单示例

1、下载thrift

1)点击下载:thrift-0.9.1.tar.gz (或者http://thrift.apache.org/download)

2)Thrift compiler for Windows (thrift-0.9.1.exe)

两个都要下载。

2、引入thrift.dll

这里将下载好的.gz文件解压后,然后找到lib目录

package com.amos.thrift;

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

/**
* Created by amosli on 14-8-12.
*/
public class BlogClient {

public static final String SERVER_IP = "localhost";
public static final int SERVER_PORT = 7911;
public static final int TIMEOUT = 3000000;

/**
* @param args
*/
public static void main(String[] args) {
BlogClient client = new BlogClient();
client.startClient("amosli");

}

/**
* @param userName
*/
public void startClient(String userName) {
TTransport transport = null;
try {
transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
// 协议要和服务端一致
TProtocol protocol = new TBinaryProtocol(transport);
// TProtocol protocol = new TCompactProtocol(transport);
// TProtocol protocol = new TJSONProtocol(transport);
ThriftCase.Client client = new ThriftCase.Client(protocol);

transport.open();

//case 1
client.testCase1(1, 2, "3");

//case 2
Map<String, String> num1 = new HashMap<String, String>();
num1.put("username", "amosli");
num1.put("address", "shanghai");
client.testCase2(num1);

//case 3
client.testCase3();

//case 4
List<Blog> list = new ArrayList<Blog>();
ByteBuffer content = ByteBuffer.allocate(30);
content.put("this is content java client".getBytes());

Map<String, String> props = new Hashtable<String, String>();
props.put("one", "1");
props.put("two", "2");
props.put("three", "3");

list.add(new Blog("topic1 is rpc", content, System.currentTimeMillis(), "001", "192.168.0.11", props));
list.add(new Blog("topic2 is rpc too!", content, System.currentTimeMillis(), "002", "192.168.0.12", props));

client.testCase4(list);

System.out.println("blog client stop ....");
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transport) {
transport.close();
}
}
}

}


View Code
C#服务端“开户服务”的事件和纯C#版的代码是一样的,如下:

Thread thread = new Thread(new ThreadStart(new ThreadStart(new BlogServer().StartServer)));
thread.Start();//start


本文源码https://github.com/amosli/rpc/tree/thriftCsharp

纯C#版实现主要参考http://www.cnblogs.com/hanmos/archive/2011/09/15/2177891.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: