vs2010 使用SignalR 提高B2C商城用户体验(一)
1、需求简介,做为新时代的b2c商城,没有即时通讯,怎么提供用户粘稠度,怎么增加销量,用户购物的第一习惯就是咨询,即时通讯,应运而生。这里使用SignalR来实现即时通讯,再好不过了,不过项目依然简历在2010的基础上,所以不能使用新版本的SignalR了,这里介绍一下1.0.0版本的。
2、整个框架大概是这样搭建的,欢迎拍砖:
3、启动VS2010,新建一个项目,这里我建立的是asp.net mvc4
然后通过nuget引入SignalR所需要的组件
Install-Package Microsoft.AspNet.SignalR -Version 1.0.1
关于nuget怎么使用就不过多介绍了,回车后,所需要的组件基本已经引入项目中了,下面进入开发。
(1)先介绍推送服务器开发:
在项目下,新加一个文件夹SignalR,
然后建立我们的集线器,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web; using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR.Hubs; using Owin; namespace SignalRTest.SignalR { [HubName( "pushHub" )] public class PushHub : Hub { public void Send( string message) { Clients.All.addMessage(message); } public void Bind( string userKey) { } public override Task OnConnected() { var id = Context.ConnectionId; var c = Clients.Caller; return base .OnConnected(); } } } |
Send方法,主要用来向客户端广播消息,Bind我本意是做登录校验,然后绑定客户端,OnConnected当客户端发起连接后会出发,里面的成员可以用一个字典进行管理。
然后进入Global.asax,配置一下路由,我这里的配置是适用于跨域的,后面会介绍到。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Routing; using Microsoft.AspNet.SignalR; using Owin; namespace SignalRTest { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { var config = new HubConfiguration(); config.EnableCrossDomain = true ; RouteTable.Routes.MapHubs(config); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); } } } |
(2)web页面开发:
先创建母版页,请注意js的顺序,json2.js主要是用于支持ie7及以下版本的。
1 @{ 2 Layout = null; 3 } 4 5 6 7 8singalr 9 10 11 12 13 14 1516 @RenderBody()1718 19
然后创建主页,我是在homecontroller里面创建的index,这里就不过多介绍了:
1 @{ 2 Layout = "~/views/shared/_layout.cshtml"; 3 } 4 4243 Hub Chat
4445 46 47 48 49 5051 消息记录: (你是:ny):52
5354
55
此时,启动我们的项目
已经可以进行广播了,开启多个客户端看一下效果
是不是感觉很不错。此时,只是当前系统的,并不能做到与其他系统互通有无,那我们加个web方法,提供给其他服务器进行推送调用:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 using Microsoft.AspNet.SignalR; 7 using Microsoft.AspNet.SignalR.Hubs; 8 using SignalRTest.SignalR; 9 10 namespace SignalRTest.Controllers11 {12 public class HomeController : Controller13 {14 //15 // GET: /Home/16 ///17 /// 用户界面18 /// 19 ///20 public ActionResult Index()21 {22 return View();23 }24 25 /// 26 /// web接口,推送消息27 /// 28 /// 29 ///30 public string Send(string msg)31 {32 var context = GlobalHost.ConnectionManager.GetHubContext ();33 context.Clients.All.addMessage(msg);34 return "ok";35 }36 37 }38 }
这时我们来调用一下看看:
这样,我们就可以给客服人员做一个页面,让他们来给指定用户,或者全站用户广播消息了,是不是感觉很棒。