rpc java 服务器_使用Java调用Python服务器RPC

本文展示了如何使用Java调用Python实现的RPC服务。首先提供了Python创建RPC服务器的代码,然后介绍了Java端如何配置和使用Apache XML-RPC库来连接并执行Python服务器上的函数,以获取'get_hello'返回的字符串。
摘要由CSDN通过智能技术生成

#先上一个整体的Python代码,它可以作为Python建立RPC服务器或客户端的通用库

#test_rpc.py

#coding=utf-8

from SimpleXMLRPCServer import SimpleXMLRPCServer

from SocketServer import ThreadingMixIn

from xmlrpclib import ServerProxy

import thread

class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):

pass

class RPCServer():

def __init__(self, ip='127.0.0.1', port='8000'):

self.ip = ip

self.port = int(port)

self.svr = None

def start(self, func_lst):

thread.start_new_thread(self.service, (func_lst, 0,))

def resume_service(self, v1, v2):

self.svr.serve_forever(poll_interval=0.001)

def service(self, func_lst, v1):

self.svr = ThreadXMLRPCServer((self.ip, self.port), allow_none=True)

for func in func_lst:

self.svr.register_function(func)

self.svr.serve_forever(poll_interval=0.001)

def activate(self):

thread.start_new_thread(self.resume_service, (0, 0,))

def shutdown(self):

try:

self.svr.shutdown()

except Exception, e:

print 'rpc_server shutdown:', str(e)

class RPCClient():

def __init__(self, ip='127.0.0.1', port='8000'):

self.svr = ServerProxy('http://'+ip+':'+port+'/', allow_none=True, use_datetime=True)

def get_svr(self):

return self.svr

def get_hello():

return 'hello!'

if __name__ == "__main__":

r = RPCServer('0.0.0.0', '8061')

r.service([get_hello], 0) #这里仅仅载入get_hello函数

#启动test_rpc.py待用

python test_rpc.py

#下面开始Java,首先下载jar包 ,在

#如果使用Eclipse,通过 “右键项目根目录->properties->Java Build Path->Libraries->add External JARs" 导入jar包

commons-logging-1.1.jar

xmlrpc-client-3.1.3.jar

xmlrpc-server-3.1.3.jar

ws-commons-util-1.0.2.jar

xmlrpc-common-3.1.3.jar

import java.net.URL;

import java.net.MalformedURLException;

import org.apache.xmlrpc.XmlRpcException;

import org.apache.xmlrpc.client.XmlRpcClient;

import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

import org.apache.xmlrpc.client.XmlRpcHttpTransportException;

public class Test {

public static void main(String[] args) throws MalformedURLException,

XmlRpcHttpTransportException {

XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();

config.setServerURL(new URL("http://127.0.0.1:8061/RPC2"));

XmlRpcClient client = new XmlRpcClient();

client.setConfig(config);

// 根据不同的python函数形式,构造参数

// 两个整形参数

//Object[] params = new Object[] {new Integer(1), new Integer(2)};

// 单个字符串参数

//Object[] params = new Object[] {new String("HELLO")};

// 无参数

Object[] params = null;

try {

// 返回的结果是字符串类型,强制转换res为String类型

String res = (String) client.execute("get_hello", params);

System.out.println(res);

} catch (XmlRpcException e11) {

e11.printStackTrace();

}

}

}

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值