所需環(huán)境:SignalR運(yùn)行在.NET 4.5平臺上,這里演示時采用ASP.NET MVC 3;
臨猗網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),臨猗網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為臨猗1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個售后服務(wù)好的臨猗做網(wǎng)站的公司定做!
一.簡介
ASP .NET SignalR 是一個ASP .NET 下的類庫,可以在ASP .NET 的Web項(xiàng)目中實(shí)現(xiàn)實(shí)時通信。
二.原理
其實(shí)現(xiàn)原理跟WCF或Remoting相似,均為使用遠(yuǎn)程代理來實(shí)現(xiàn)。實(shí)現(xiàn)接口有2種分別是PersistentConnection 和 Hubs,其中PersistentConnection 是實(shí)現(xiàn)長時間js輪循的,Hub是用來解決實(shí)時信息交換問題,其利用js動態(tài)載入方法實(shí)現(xiàn),客戶端與服務(wù)器端全部使用json來交換數(shù)據(jù)。
三.Demo創(chuàng)建
1.打開NuGet 安裝 Microsoft ASP.NET SignalR
2.實(shí)現(xiàn)
a).實(shí)現(xiàn)PersistentConnection
添加myconnection.cs文件
namespace MvcApplicationSignalR { public class myconnection : PersistentConnection { protected override Task OnReceivedAsync(string clientId, string data) { // Broadcast data to all clients data = string.Format("數(shù)據(jù)是:{0} 時間是:{1}", data, DateTime.Now.ToString()); //return Connection.Broadcast(data); return Send(clientId, data); } } }
在Global.asax.cs文件中注冊一下代碼(第3行):
protected void Application_Start() { RouteTable.Routes.MapConnection("echo","echo/{*operation}"); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); }
在前臺頁面中添加如下html代碼:
@ViewBag.Message
執(zhí)行效果如下:
可在
protected
override
Task OnReceivedAsync(
string
clientId,
string
data)
方法中進(jìn)行消息的監(jiān)視。
b).實(shí)現(xiàn)Hubs
新建Chat.cs類,代碼如下:
namespace MvcApplicationSignalR { [HubName("chat")] public class Chat : Hub { public void Send(string clientName, string message) { Clients.addSomeMessage(clientName, message); } } }
前臺模板html代碼如下:
@ViewBag.Title
后臺代碼如下:
public ActionResult HubChat() { ViewBag.ClientName = "用戶-" + Rnd.Next(1, 9); return View(); }
對應(yīng)的視圖代碼為:
@model dynamic @{ ViewBag.Title = "title"; }Hub Chat
消息記錄: (你是:@ViewBag.ClientName):
hubDemo.js所對應(yīng)的內(nèi)容如下:
$(function () { var myClientName = $('#Placeholder').val(); // Proxy created on the fly var chat = $.connection.chat; // Declare a function on the chat hub so the server can invoke it chat.addSomeMessage = function (clientName, message) { writeEvent('' + clientName + ' 對大家說: ' + message, 'event-message'); }; $("#broadcast").click(function () { // Call the chat method on the server chat.send(myClientName, $('#msg').val()) .done(function () { console.log('Sent message success!'); }) .fail(function (e) { console.warn(e); }); }); // Start the connection $.connection.hub.start(); //A function to write events to the page function writeEvent(eventLog, logClass) { var now = new Date(); var nowStr = now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds(); $('#messages').prepend('
資源:
一個很酷的同步操作表格的示例(使用 jTable ):
http://www.codeproject.com/Articles/315938/Real-time-Asynchronous-Web-Pages-using-jTable-Sign
組通知示例:
http://www.codeproject.com/Articles/404662/SignalR-Group-Notifications
先寫到這里,以后在深度研究