我目前正在实现一个RPC接口(包括客户端和服务器),关于原始TCP连接之上的某些专有产品。该文档明确要求JSON-RPC通信,它还添加了以下提示:
In <doc number>, antenna and remote device are both server and client
在界面中,客户端应该能够从服务器接收notifications
,简单的json消息,而无需回复它们。
基本上,它看起来像这样:
Server ---------------------------------------------------- Client
<------------------------ Client Initiate Connection
Server acknowledge connection opened -------------->
Server sends a notification about some event------->
Server sends another notif. about another event---->
<---------------------------- Client Stop Connection
Server acknowledge connection stopped ------------->
执行简单的请求/响应事件非常简单:
服务器如下所示:
func (l *Listener) GetLine(line []byte, ack *bool) error {
fmt.Println(string(line))
return nil
}
func main() {
addy, err := net.ResolveTCPAddr("tcp", "0.0.0.0:42586")
inbound, _:= net.ListenTCP("tcp", addy)
listener := new(Listener)
rpc.Register(listener)
rpc.Accept(inbound)
}
客户端可以调用服务器函数
client, err := rpc.Dial("tcp", "localhost:42586")
in := bufio.NewReader(os.Stdin)
for {
line, _, err := in.ReadLine()
var reply bool
client.Call("Listener.GetLine", line, &reply)
}
在这种情况下,我看不出如何将数据从服务器发送到客户端。如何使用相同的TCP连接执行此操作?它们如何既是服务器又是客户端?