У меня есть несколько методов, зарегистрированных для типа в серверной программе для RPC в Golang. Я хочу использовать эти методы от клиентов, а также от самого сервера. например У меня есть дополнительный метод, зарегистрированный как метод RPC, который я хочу вызывать у клиентов. Но я хочу вызвать тот же метод в той же серверной программе и для какой-то другой функции. Есть ли способ сделать это?
Вызов зарегистрированного метода RPC на том же сервере в Golang
Ответы (2)
Трудно ответить, если мы не знаем, как вы строите свой код на каком-то примере, это будет проще.
Два варианта. Создайте клиент с горутиной, установите соединение с сервером и вызовите метод. Этот метод плохой, wtf.
Второй :
type CalcServ struct {
LastAnswer
}
type CalcReq struct {
X int
Y int
}
type CalcResp struct {
Z int
}
func (serv *CalcServ) Add(req *CalcReq, resp *CalcResp) error {
serv.LastAnswer = req.X + req.Y
serv.Show(req, resp)
return nil
}
func (serv *CalcServ) Show(req *CalcReq, resp *CalcResp) error {
resp.Z = serv.LastAnswer
return nil
}
Мой пример не является хорошей реализацией, но я просто хочу показать вам идею. Существует два метода RPC, Add
и Show
, и Add
вызов Show
.
person
Manawasp
schedule
13.04.2015
Я должен был сделать это сам. Это надуманный пример, показывающий, что я сделал в моем случае:
Это функция RPC...
func (server *Server) RemoteGoroutineCount(request GoroutineCountsRequest, response *GoroutineCountsResponse) error {
response.Count = runtime.NumGoroutine()
return nil
}
Теперь, если я хочу вызвать это локально, я могу просто сделать
req := GoroutineCountsRequest{}
res := &GorouteCountsResponse{}
s := &Server{}
err := s.RemoteGoroutineCount(req, res)
// handle error
// Now res has your filled in response
res.NumGoroutines
person
sberry
schedule
17.04.2015
localhost
и использовать его как клиент. - person Benjamin Gruenbaum   schedule 12.04.2015