Hprose之JAVA服务端与C++客户端

8 篇文章 0 订阅

JAVA服务端(jetty)

public class EntryClass {
    public static void main(String argv[]) throws Exception {
        Server server = new Server(80);
        ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);

        handler.setContextPath("/");
        handler.addServlet(new ServletHolder(new MyHproseServlet()), "/rpc");

        server.setHandler(handler);
        server.start();
        server.join();
    }
}

public class MyHproseServlet extends HproseServlet {
    @Override
    protected void setGlobalMethods(HproseMethods hproseMethods) {

        hproseMethods.addInstanceMethods(new RpcHandler());
    }
}

interface IRpcHandler {
    String addx(int a, String b, double c, String[] d, byte[] e);
}

public class RpcHandler implements IRpcHandler {
    @Override
    public String addx(int a, String b, double c, String[] d, byte[] e) {
        return String.format("Hi: %d %s %f %d %d", a, b, c, d.length, e.length);
    }
}

C++客户端

using namespace std;
using namespace hprose;

HproseHTTPClient client("http://localhost/rpc");

int _tmain(int argc, _TCHAR* argv[])
{
	vector<Any> args;
	
	args.push_back(123);// int
	args.push_back(string("789"));// string (utf8)
	args.push_back(3.6);// double
	{
		vector<string> p4;

		p4.push_back("1");
		p4.push_back("2");
		p4.push_back("aaa");
		args.push_back(p4);// string array
	}
	{
		vector<unsigned char> p5;

		p5.push_back(0x00);
		p5.push_back(97);
		p5.push_back(0x00);
		p5.push_back(0x00);
		args.push_back(p5);// bytes
	}
	string r = client.Invoke<string>("addx", args);
	return 0;
}
 

结束语

JAVA的支持很好, 各种自动转换和映射
C++就比较蛋疼了, 没找到什么文档, 想去官方论坛问可是新账号两小时内禁止发言, 囧
刚开始不知如何传输字节流
最后还是翻源码, 尝试了N种方法才知道是vector<unsigned char>那么个玩意
目前搞定了C++传输int, double, string, 数组, 二进制流. 足够应对大部分需求
瞅了瞅代码应该还支持queue, list, map类型, 以后用到以后再说吧
若接口返回非基本数据类型, 大概就要用到javabean了
可java里面的bean对应C++里的啥, struct?class?
目前想到的就是传protobuf的流当返回值, 或者传XML/JSON来解析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值