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

请教一下client的问题 #23

Open
shinwing opened this issue Dec 27, 2017 · 3 comments
Open

请教一下client的问题 #23

shinwing opened this issue Dec 27, 2017 · 3 comments

Comments

@shinwing
Copy link

我非常喜欢这个框架,感谢分享。
现在我遇见了这样一个问题:

其实client在获取rpc的结果的时候,其实是一个同步的方式。也就是说发送了,等返回。
但是如果server端有推送的话,那么client应该怎么区分推送和普通的返回结果呢?

而且,其实client的请求和返回并不是严格对应的。譬如乒乓那个例子。如果返回值不只是pang这么一种的话,是否有可能对不上了呢?如果一定严格要求对上的话,有没有什么好办法呢?

谢谢。

@leesper
Copy link
Owner

leesper commented Dec 28, 2017

@shinwing Hi,RPC我不是很了解,我说说我自己的思考哈。我感觉你担心的是消息是不是会发生“串号”的问题。那么一般来说server和client的通信是通过它们之间建立的connection来实现的,client在connection上发送一个request,server处理完毕后通过connection返回一个response。如果是推送一个push,那么可以双方约定一个协议号或者协议名称,client收到消息的时候先检查这个名称或者协议号,根据协议号来执行相应的业务逻辑,这样是不是就可以区分了呢?我在tao框架中用的是协议号,不过这是山寨做法,更好的做法,你可以参考陈硕的这篇blog一种自动反射消息类型的 Google Protobuf 网络传输方案

对于pingpong那个例子而言,如果返回值不只一个,我们同样可以采用协议号或者协议名称的方式来区分并建立不同的处理逻辑。

不知道我的回答有没有解决你的问题呢

@shinwing
Copy link
Author

非常感谢回复。大抵思路我也看了,和您说的差不多。
唯一一点小问题是,用协议号和名称应该是不行的,原因是因为同名的方法重复发送的时候,其实如果需要严格对照返回值,会对比不上。

所以可能是加上一个seq之类的。具体我今天打算参照一下rpcx的做法。

再次感谢回复。

@leesper
Copy link
Owner

leesper commented Dec 28, 2017

@shinwing 不客气,我也是初学者

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