基于动态代理的WebAPI/RPC/webSocket框架
2021-01-30 16:15
标签:local 粘贴 lin 地方 ror mod get type date API/RPC/webSocket三个看起来好像没啥相同的地方,在开发时,服务端,客户端实现代码也大不一样 最近整理了一下,通过动态代理的形式,整合了这些开发,都通过统一的接口约束,服务端实现和客户端调用 先上RPC示例 接口和接口实现 上面是一个标准接口和接口实现,并继承了AbsService, Login方法标注了LoginPoint特性,表示登录切入点,调用此接口时首先得调用此方法,方法内SaveSession存储登录状态 Test1方法内使用了CurrentUserName,以获取登录方法保存的Session 服务启动 CreateRPC是一个扩展方法,引用CRL.RPC获取 SetSessionManage,自定义Session存储,默认是内存里 CheckSign 处理请求时,进行参数签名验证 客户端接口定义 接口调用 客户端先调用login方法进行登录,并记录服务端返回的token Test1方法将token回传给服务器以验证登录状态 当调用了UseSign方法,就会对提交的参数进行签名,签名KEY为登录后服务端返回的TOKEN,服务端同样按此对签名进行比较 特点: 技术实现: 同样基于上文结构,接口定义就不粘贴了 服务端定义 如果宿主是.NET网站 在web.config增加处理module 如果是单独程序,启动ServerListener即可 客户端调用 WebSocket是一个比较特殊的方式,常用来做双工通讯的方式,客户端能往服务端发送数,服务端也能往客户端发送据 除去服务端往客户端发数据,也可以采用接口调用的形式实现,在这里,服务端往客户端发送数据,客户端采用了订阅的方式 服务端实现 上面代码,服务端开启了一个线程,定时往客户端"hubro"发送数据 socket.SendMessage 客户端实现 clientConnect.SubscribeMessage就是订阅消息了,通过订阅的方式,处理服务端发送的数据 以上是大致使用方式,具体参见源码和demo CRL: https://github.com/hubro-xx/CRL5 RCP: https://github.com/hubro-xx/CRL5/tree/master/RPC WebAPI: https://github.com/hubro-xx/CRL5/tree/master/DynamicWebApi WebSocket: https://github.com/hubro-xx/CRL5/tree/master/WebSocket 基于动态代理的WebAPI/RPC/webSocket框架 标签:local 粘贴 lin 地方 ror mod get type date 原文地址:https://www.cnblogs.com/hubro/p/11643417.html服务端
public interface ITest
{
bool login(int? a);
string Test1(string msg, out string error);
}
public class Test : AbsService, ITest
{
[LoginPoint]//登录切入点
public bool login(int? a)
{
SaveSession("user","token");
return true;
}
public string Test1(string msg, out string error)
{
var user = CurrentUserName;
var tag = CurrentUserTag;
error = "error";
return msg;
}
}
var server = new ServerCreater().CreatetRPC(805);
server.CheckSign();
server.SetSessionManage(new SessionManage());
server.Register
客户端
public interface ITest
{
bool login(int? a);
string Test1(string msg,out string error);
}
var clientConnect = new RPCClientConnect("127.0.0.1", 805);
clientConnect.UseSign();
int? a=null;
client.login(a);//先登录认证
string error = "";
var str = client.Test1("aaa",out error);
Console.WriteLine($"return:{str} out:{error}");
动态webApi
var server = new ServerCreater().CreatetApi();
server.CheckSign();
server.SetSessionManage(new SessionManage());
server.Register
var clientConnect = new CRL.DynamicWebApi.ApiClientConnect("http://localhost:53065");
clientConnect.UseSign();
var service = clientConnect.GetClient
WebSocket
var server = new ServerCreater().CreatetWebSocket(8015);
server.CheckSign();
server.SetSessionManage(new SessionManage());
server.Register
var clientConnect = new CRL.WebSocket.WebSocketClientConnect("127.0.0.1", 8015);
clientConnect.UseSign();
clientConnect.SubscribeMessage
源码地址:
文章标题:基于动态代理的WebAPI/RPC/webSocket框架
文章链接:http://soscw.com/index.php/essay/49157.html