Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问如何使用返回机构体,然后远程调用结构体方法 #28

Closed
fromiuan opened this issue Feb 22, 2017 · 6 comments
Closed

Comments

@fromiuan
Copy link

fromiuan commented Feb 22, 2017

服务端代码
`
package main

import (
"net/http"

rpc "github.com/hprose/hprose-golang/rpc/websocket"

)

type Hello struct {
Name string
}

func NewHello(name string) Hello {
return Hello{Name: name}
}

func (this Hello) Hello(speak string) string {
return "Hello " + this.Name + speak + "!"
}

func main() {
service := rpc.NewWebSocketService()
service.AddFunction("newhello", NewHello)
http.ListenAndServe(":8080", service)
}
`
请问客户端如何使用初始化结构后Hello方法,

@fromiuan
Copy link
Author

但是初始化的时候NewHello这个带进去一个参数,如果使用AddMethod 方法只能导出Hello方法,不能使用结构体中的Name变量了

@andot
Copy link
Member

andot commented Feb 24, 2017

NewHello 的时候带入的变量,在 Hello 方法中可以被直接使用。AddMethod 方法发布的方法是绑定到对象上的方法。所以对象上的属性(字段)都可以使用。

@fromiuan
Copy link
Author

马哥可以按上面给个客户端例子不?

@andot
Copy link
Member

andot commented Feb 28, 2017

你客户端也定义相同的这个类,然后返回的到客户端的结果也是一个 Hello 的对象,但是你调用返回的 Hello 对象上的方法是本地方法,并不是一个远程方法了。也就是说返回对象时,是把对象序列化之后返回,客户端收到之后反序列化为客户端的一个本地对象,所以这个对象上的方法是客户端本地对象上的方法。

如果你是想要发布远程对象,你直接这样发布:

service.AddMethod("Hello", NewHello("OOXX"), "");

@fromiuan
Copy link
Author

fromiuan commented Mar 1, 2017

谢谢马哥的详细解答。

@fromiuan fromiuan closed this as completed Mar 1, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants