asp.net signalR 专题—— 第四篇 模拟RPC模式的Hub操作
在之前的文章中,我们使用的都是持久连接,但是使用持久连接的话,这种模拟socket的形式使用起来还是很不方便的,比如只有一个唯一的 OnReceived方法来处理业务逻辑,如下图: 1 protected override Task OnReceived(IRequest request,string connectionId,1)">string data) 2 { 3 return Connection.Broadcast(data); 4 } ? 但是在singlaR体系中并不是这样,我们还有更加平易近人的一个类似RPC的Hub层,如下图一样: 是不是很好奇??? 下面我们来看看这个Hub层怎么构建。 ? 一:新建hub集线器层 ? ? 选择web模板,下面有一个singlaR集线器类的模板,新建即可,在这个模板中有一个示例代码,Clients.All.hello() 就是用来调用客户端的hello方法, 而MyHub1中的Hello()用来让客户端调用,如此这样来实现双向通讯,如下图: ? 二:在Startup中注册 其实注册很简单,比持久连接还容易,因为持久连接需要一个“类”map一个“url”这样的模式,而Hub就不需要了,它就是用一个默认的singlar路径 map整个hub,比如下图中的提示: ? 三:实现客户端 ? ? 客户端实现的话,有代理一说和无代理一说,无代理的话,我们自己createProxy,有代理的话就是利用动态生成一个js文件进行编程。 ? 1. 无代理模式 <!DOCTYPE html> <htmlhead> meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> title></charset="utf-8" script src="scripts/jquery-1.10.2.js"script="scripts/jquery.signalR-2.1.2.js"</bodytype="text/javascript"> //无代理 var conn = $.hubConnection(); proxy conn.createHubProxy("MyHub1); 注册客户端方法 “hello” proxy.on(hello,function (data) { console.log(客户端方法被调用); }); conn.start().done( (data) { 调用服务器方法 proxy.invoke(Hello); }); > ? 从上面可以看到,invoke方法就是调用服务器方法的操作,比如这里服务端的Hello方法,js中的on就是用来绑定客户端方法,让服务器调用, 然后我们运行一下: ? 2. 有代理模式 有代理的模式下,需要动态生成一个js,使用方式就是script引用。 ="/signalr/js"> ? 然后运行程序之后,就有了自动生成的一个js文件,是不是很神奇~~~ ? 有了这个js之后,我们就可以方便的编程了,但是有个遗憾点就是,js是在程序运行后才生成的,这样的话,在代码编程的时候是无法有这个动态生 成的js文件,唯一可以做到的就是:先将运行好的js代码copy到script文件夹下面,添加引用之后,就可以在vs中编程了,如下图: 好了,有人说这种方式不是很方便,确实不方便,我们也有更高级的用法,那就是使用singlar.utils下面的signlar.exe +vs事件生成,这种模式 可以参考本页面右上角的微博。 ? 好了,就此打住~,继续忙活了。 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Visual Studio 2008 – 解决方案的条件编译符号
- entity-framework – EF codefirst如何知道为哪个模型类创建
- asp.net – IsAuthenticated适用于浏览器 – 但不适用于Air
- asp.net-mvc – AOP vs MVC FilterAttributes vs Intercept
- asp.net – DotLess的“web”属性究竟做了什么?
- asp.net-mvc – ASP.NET MVC视图或URL应该有多少级别?
- asp.net-mvc – 如何从ActionExecutingContext获取MethodIn
- asp.net-mvc-4 – 如何配置使用Authorize(Roles)属性时会发
- asp.net-mvc – 在没有EF的情况下在appsettings.json中获取
- asp.net-mvc – 单元测试视图?
- asp.net – 如何禁用提交行为的asp:ImageButton
- asp.net core 实现支持多语言
- 使用HttpModule Asp.net重定向URL
- 实体框架 – MVC 3 EF 4.1 dbContext – 删除具有
- ASP.NET MVC使用Ajax的辅助的解决方法
- asp.net-mvc-3 – System.ComponentModel.DataAn
- asp.net-mvc-3 – 将原始html转储到Telerik网格
- asp.net-core – EntityFramework核心数据库首先
- Asp.net,paypal和IPN ..如何自动付款?
- asp.net – 如何在Simile时间轴中重新加载数据