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

golang与java间的json-rpc跨语言调用

2017-02-08 09:08 477 查看
1、java通过jni调用dll库实现与后台C(C++)通信的代码实现还是有些麻烦。

2、Golang的出现,使得一些对C代码不是很熟的程序员看见的希望,虽然说当前对于Golang就还有很多质疑的声音,

但是个人认为对于一般下后台业务,Golang是完全可以胜任的。

3、还有一个好处就是java对Golang后台业务的调用时很方便,下面以一个例子进行说明。

4、Golang服务端代码如下(rpcserver.go):

package main

// first we create a simple golang rpc server based on socket
import (
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)

type Counter struct {
Sum int
}

func (this *Counter) Add(i int, r *int) error {
this.Sum += i
*r = this.Sum
fmt.Printf("i: %v", i)
return nil
}

func main() {

rpc.Register(new(Counter))

l, err := net.Listen("tcp", ":3333")
if err != nil {
fmt.Printf("Listener tcp err: %s", err)
return
}

for {
fmt.Println("wating...")
conn, err := l.Accept()
if err != nil {
fmt.Sprintf("accept connection err: %s\n", conn)
}
go jsonrpc.ServeConn(conn)
}
}


5、java实现的客户端代码如下

package com.test;

import com.googlecode.jsonrpc4j.JsonRpcClient;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;

public class helloworld {

public static void main(String[] args) {

try {
Socket socket = new Socket("192.168.110.157", 3333);
JsonRpcClient client = new JsonRpcClient();

InputStream ips = socket.getInputStream();
OutputStream ops = socket.getOutputStream();

int reply = client.invokeAndReadResponse("Counter.Add", new Object[]{1001}, int.class, ops, ips);

System.out.println("reply: " + reply);

} catch (IOException e) {
e.printStackTrace();
} catch (Throwable throwable) {
throwable.printStackTrace();
}

}
}


6、编译Golang服务器代码并启动服务端
1)go build rpcserver.go

2) ./rpcserver

root@docker1:/home/docker/xu/go-pro/java-go# ./rpcserver
wating...
wating...
wating...
i: 1001wating...
i: 1001


7、运行java客户端程序,执行结果如下:
reply: 2002

实验需要的jar请访问链接:http://download.csdn.net/detail/xuguokun1986/9749486
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: