beetlex-io / XRPC

dotnet high performance remote interface and delegate invoke(RPC) communication components,support millions RPS remote interface method invokes
Apache License 2.0
84 stars 22 forks source link

双向调用的讨论 #16

Closed snikeguo closed 4 years ago

snikeguo commented 4 years ago

关于双向调用,目前现有的例子,服务端和客户端耦合太高,并且代码有些繁琐,我觉得服务端完全可以把客户端的那部分代码拿过来,类似于这么写: 场景:假定服务器发生了一些事情要通知客户端: 服务器端:

var delInstance= xrpcserver.Create<MyDelegateType>(
);

之后,只要想通知客户端,那么就可以这么写delInstance?.Invoke(...) 当然如果客户端不想监听这个事件的话,也没关系,完全自由的。

客户端:

xrpcclient.AddDelegate<MyDelegateType>(方法或者代理等)。

我这种写法也是模仿您现有的写法,不知道这 样能不能实现。大佬,您觉得呢

beetlex-io commented 4 years ago

基于委托的方式的确是比接口来得更简单方便,实现应该问题不大需要整理设计一下。

snikeguo commented 4 years ago

场景:假定xrpcserver现在有三个客户端a,b,c 与之连接,xrpcserver经过业务逻辑(比如,客户端a ,b login成功), 所以xrpcserver他只想通知客户端a,b 不打算通知客户端c。

var delInstance= xrpcserver.Create<MyDelegateType>();

光从上面这条语句,delInstance 可能就全部通知了链接的客户端 从这个场景上说,delInstance 按道理是和Session相关联的、有联系的,也就是说服务器想通知那些客户端,是由服务器决定的。

var delInstance= xrpcserver.Create<MyDelegateType>(actor,Session s); //s为要通知的客户端,我想,可能是这种的?

大佬,关于服务器这块设计,您有什么想法?