vs2010 使用SignalR 提升B2C商城用戶體驗(一)

vs2010 使用SignalR 提升B2C商城用戶體驗(一)javascript

一、需求簡介,作爲新時代的b2c商城,沒有即時通信,怎麼提供用戶粘稠度,怎麼增長銷量,用戶購物的第一習慣就是諮詢,即時通信,應運而生。這裏使用SignalR來實現即時通信,再好不過了,不過項目依然簡歷在2010的基礎上,因此不能使用新版本的SignalR了,這裏介紹一下1.0.0版本的。html

二、整個框架大概是這樣搭建的,歡迎拍磚:java

  

三、啓動VS2010,新建一個項目,這裏我創建的是asp.net mvc4jquery

 

而後經過nuget引入SignalR所須要的組件  web

     Install-Package Microsoft.AspNet.SignalR -Version 1.0.1面試

關於nuget怎麼使用就不過多介紹了,回車後,所須要的組件基本已經引入項目中了,下面進入開發。json

(1)先介紹推送服務器開發:跨域

  在項目下,新加一個文件夾SignalR,服務器

  而後創建咱們的集線器,mvc

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,配置一下路由,我這裏的配置是適用於跨域的,後面會介紹到。

  

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 http://go.microsoft.com/?LinkId=9394801
    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 <!DOCTYPE html>
 5 <html>
 6 <head>
 7     <meta name="viewport" content="width=device-width" />
 8     <title>singalr</title>
 9     <script src="@Url.Content("~/Scripts/jquery-1.6.4.js")" type="text/javascript"></script>
10     <script src="@Url.Content("~/Scripts/json2.js")" type="text/javascript"></script>
11     <script src="@Url.Content("~/Scripts/jquery.signalR-1.0.1.js")" type="text/javascript"></script>
12     <script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
13 </head>
14 <body>
15     <div>
16         @RenderBody()
17     </div>
18 </body>
19 </html>

而後建立主頁,我是在homecontroller裏面建立的index,這裏就不過多介紹了:

 1 @{
 2     Layout = "~/views/shared/_layout.cshtml";
 3 }
 4 <script type="text/javascript">
 5 
 6     $(function () {
 7 
 8 
 9         // Proxy created on the fly
10         var chat = $.connection.pushHub;
11         // Declare a function on the chat hub so the server can invoke it
12         chat.client.addMessage = function ( message) {
13             writeEvent('<b>ny</b> 對你們說: ' + message, 'event-message');
14         };
15 
16         $("#broadcast").click(function () {
17             // Call the chat method on the server
18             chat.server.send( $('#msg').val())
19                             .done(function () {
20                                 console.log('Sent message success!');
21                                 
22                             })
23                             .fail(function (e) {
24                                 console.warn(e);
25                             });
26         });
27 
28         // Start the connection
29         $.connection.hub.start().done(function() {
30             //綁定
31             chat.server.bind("wo");
32         });
33 
34         //A function to write events to the page
35         function writeEvent(eventLog, logClass) {
36             var now = new Date();
37             var nowStr = now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds();
38             $('#messages').prepend('<li class="' + logClass + '"><b>' + nowStr + '</b> ' + eventLog + '.</li>');
39         }
40     });
41 </script>
42 <h2>
43     Hub Chat</h2>
44 <div>
45     <input type="text" id="Placeholder" value="ny" hidden="true" />
46     <input type="text" id="msg" />
47     <input type="button" id="broadcast" value="廣播" />
48     <br />
49     <br />
50     <h3>
51         消息記錄: (你是:<span id="MyClientName">ny</span>):
52     </h3>
53     <ul id="messages">
54     </ul>
55 </div>

此時,啓動咱們的項目

已經能夠進行廣播了,開啓多個客戶端看一下效果

是否是感受很不錯。此時,只是當前系統的,並不能作到與其餘系統互通有無,那咱們加個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.Controllers
11 {
12     public class HomeController : Controller
13     {
14         //
15         // GET: /Home/
16         /// <summary>
17         /// 用戶界面
18         /// </summary>
19         /// <returns></returns>
20         public ActionResult Index()
21         {
22             return View();
23         }
24 
25         /// <summary>
26         /// web接口,推送消息
27         /// </summary>
28         /// <param name="msg"></param>
29         /// <returns></returns>
30         public string Send(string msg)
31         {
32             var context = GlobalHost.ConnectionManager.GetHubContext<PushHub>();
33             context.Clients.All.addMessage(msg);
34             return "ok";
35         }
36 
37     }
38 }

這時咱們來調用一下看看:

這樣,咱們就能夠給客服人員作一個頁面,讓他們來給指定用戶,或者全站用戶廣播消息了,是否是感受很棒。

今天先到這裏,要去面試我的,到這裏,咱們的推送服務器基本搭建完成,能夠在這個基礎上進行擴展,作出一個很棒的推送服務器,下一章咱們會介紹跨域通訊,與其餘子站通信,還有與客戶端通訊。

相關文章
相關標籤/搜索