-
Notifications
You must be signed in to change notification settings - Fork 34
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
新增客户端和服务器端传递共享数据的功能 #7
Comments
不改变现有通信协议的实现方案此方案是通过在实现中,服务器端和客户端对发布的方法增加约定来实现的。 服务器端在发布方法时,通过设置一个选项,来约定客户端传来的第一个参数为单独的信息头(Header),该参数固定为 Map 结构的数据。当读取参数时,将其从参数列表中弹出,放入上下文对象中。用户可以在过滤器,中间件,服务器事件以及服务器发布的方法中,通过上下文对象获取或修改这些信息。 当返回结果时,将其作为引用参数返回。 客户端调用该方法时,自己手动传入作为信息头的参数,或者通过客户端中间件来自动附加上这个参数。或者将这个过程直接内置于客户端的实现中。 优点可以兼容之前的通信协议。即使在老版本的 Hprose 中,用户也可以自己通过自定义中间件实现。 缺点1、对于不需要引用参数传递的方法,在返回结果时,会返回多余的参数,对性能有一定影响。 2、可能会影响其它对参数个数敏感的功能的实现,比如推送以及反向调用等。 3、在使用上不够方便,扩展性有限。 |
新增标记的实现方案在请求和响应中新增一个 当客户端设置了全局 如果客户端没有设置全局 当服务器端读取到 在服务器返回数据时,如果上下文对象中的 客户端收到返回的 优点1、服务器端只要未使用新增的 2、客户端只要未使用新增的 3、服务器在返回 4、对原有的参数处理不做改动,在实现时更加容易,也不会影响对参数个数敏感的功能实现。 5、使用上更加方便灵活。 缺点因为对通信协议有做出修改。用户无法在不修改旧版本实现的情况下实现该功能。 |
大家如果有更好的解决方案,或者对以上方案有更好的修改,欢迎大家在下面提出。 |
服务端可以修改并且返回H这个感觉不是很必要,这个好像也不是上下文应该有的。实现方式觉得方法2会好一点 |
原来客户端的独立的上下文还是仅在客户端传递,服务器独立的上下文也是仅在服务器端传递。服务器端返回 |
抽离出来H不依赖http、tcp是对的,我也理解你说的。按照你说的应该是Request H和Response H,而上下文应该使用Request H 来传递,这样层次更清晰。因为Response H并不是上下文该有的东西 |
但是如果不返回 Response H 的话,那服务器端该如何通过结果以外的方式返回客户端需要的东西呢。比如服务器如果希望通过非结果方式来返回一个 |
是的,请求包里面包含:Request H、R |
我的意思是这样的,客户端上设置有:
方法。 对于 HTTP 客户端,如果要存取 HTTP 的头通过:
方法来跟 Hprose 的全局 在客户端的 对于 HTTP 客户端的 当进行序列化传输时, 对于 HTTP 客户端, 服务器端读取到 客户端在收到服务器端的 也就是相当于服务器返回的只是修改和增量的部分。但是对于客户端来说, 之后就可以在客户端的 所以 Hprose 的这个 所以如果你觉得叫
这样修改的话,可能就更容易理解这个东西的意图了。 不过我还是更喜欢 |
我前面说的Request H并不是特指Http Request Header。我的想法是Hprose自己定义一个传输协议,这个协议不依赖于http、tcp、mq等,这个协议客户端调用包含:Request share data、R,服务端返回包含:Response share data、R。这个是协议部分的定义。 Context是客户端调用的时候告诉服务端上下文的,他是在Request share data里面传输。
这个严格来看并不应该在Context里面定义(定义上不会出现被调用方修改上下文的情况),他可能叫其他的。或许我有些对定义偏执,但是我觉得明确之后利于理解 |
这个共享数据不仅仅是客户端告诉服务器的内容,而是在整个调用过程中,从客户端出发,到回到客户端结束这一整个流程的上下文中进行流转的内容。尤其是当实现了反向调用之后,客户端和服务器的角色可以互换。所以,这样定义才是对等的。 如果非要把服务器端返回的共享数据独立于上下文之外,那你该用什么方法来存取服务器端返回的共享数据呢。 |
反向调用并不是如上图那样实现的,反向调用是客户端提供服务,服务器端通过
|
@andot BTW,
这个在HTTP中是以Cookie实现的.大多数人都是接触HTTP协议,所以名称倒是可以按照这个来的. |
@dsonet 可惜的是, |
这个设计会让调用方即使Client还是Server,这种做法太过针对、别扭。上面的图只是针对反调用给出的更加简单清晰的解决方式,可以使用中间件解决。Core最好灵活简单 |
支持 |
@andot 那么就用H也OK。:) |
在 Hprose 1.x 和 2.0 版本中,每个调用的上下文对象都是在客户端和服务器端独立传递的,虽然这在一定程度上能够满足大多数情况的需要。但是有时我们还希望能够通过方法参数和返回结果以外的方式在客户端和服务器之间传递某些共享数据信息,实现类似于 HTTP Header 一样的功能。
下面我列出两种解决方案,请大家投票。
The text was updated successfully, but these errors were encountered: