亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

第五章SignalR的實時高頻通訊

2019-11-17 02:03:08
字體:
來源:轉載
供稿:網友

第五章SignalR的實時高頻通訊

Posted on 2015-03-29 15:51 珠海華仔 閱讀(...) 評論(...) 編輯 收藏

第五章SignalR的實時高頻通訊

概述:本例子演示了如果創建一個對象與其他瀏覽器共享實時狀態的應用程序。我們要創建的應用程序為“MoveShape”,該MoveShape頁面會顯示一個Html Div元素,用戶可以拖動,并且在用戶拖動時,該元素的新位置將被發送到服務器,這樣,其他所有已連接的客戶端都會同步更新該元素的位置。

在這個例子中使用的應用程序是基于迪米安·愛德華茲的Demo制作的,你可以在這里看到該視頻。

本例子將演示從形狀的拖動事件引發時,如何發送SignalR消息開始,至每個已連接的客戶端將收到該消息,并且更新本地形狀的位置。

雖然使用這種方法能夠很好地對SignalR的高頻實時功能進行演示,但這不是一個推薦的編程模型。因為:

1)沒有限制發送消息上限,會令客戶端和服務器端發送和接收大量的消息,最終導致性能 下降。

2)每次接收到新位置后,形狀的位置會由方法立即更新,而不是平滑地移動到新位置,所 以客戶端上形狀動畫也會被打亂。

本例子的后面部分將演示如何創建一個定時器的功能,限制該消息在客戶端和服務器端之間的發送更新消息的最大頻率。本例子創建的應用程序的最終版可以在這里下載。

1.創建項目并添加SignalR和jQuery.UI NuGet包:

1)在VS2013中創建一個asp.net Web應用程序:

2)在新的Asp.Net項目窗口中,選擇空項目并且創建:

3)在解決方案資源管理器中,右擊該項目,添加一個SignalR集顯器類(V2),該類命名為MoveShapeHub.cs,并將其添加到項目中,此步驟創建MoveShapeHub類,并將SignalR腳本和程序集引用添加到該項目中。

注意:您同樣可以用庫軟件包管理器來添加SignalR引用,可以參考前面的例子。

4)使用庫軟件包管理器來添加jQueryUI。

在程序包管理控制臺中,運行以下命令:

Install-Package jQuery.UI.Combined

該步驟將jQuery.UI庫添加到項目中。

5)在解決方案資源管理器中展開腳本文件夾,您可以看到SignalR和jQuery腳本已經被添加到項目中:

2.創建基礎應用程序:

在本節中,我們將創建在客戶端中鼠標移動事件觸發時,形狀的位置發送到服務器的應用程序。至于創建服務器廣播該消息給所有其他已連接的客戶端的功能,我們將在后面的章節中繼續講解,現在,請把注意力集中在集線器類的創建上。

1)如果在之前您使用包控制臺來添加SignalR,請先添加MoveShapeHub類到項目中。

2)使用下面的代碼替代換掉的MoveShapeHub中的:

using Microsoft.AspNet.SignalR;

using Newtonsoft.Json;

namespace MoveShapeDemo

{

public class MoveShapeHub : Hub

{

public void UpdateModel(ShapeModel clientModel)

{

clientModel.LastUpdatedBy = Context.ConnectionId;

// Update the shape model within our broadcaster

Clients.AllExcept(clientModel.LastUpdatedBy).updateShape(clientModel);

}

}

public class ShapeModel

{

// We declare Left and Top as lowercase with

// JsonPRoperty to sync the client and server models

[JsonProperty("left")]

public double Left { get; set; }

[JsonProperty("top")]

public double Top { get; set; }

// We don't want the client to get the "LastUpdatedBy" property

[JsonIgnore]

public string LastUpdatedBy { get; set; }

}

}

MoveShapeHub是SignalR集線器類的一個實現。在入門教程中,我們使用了客戶端直接調用的方法。在這本教程中,客戶端將會發送一個包含形 狀的新的X及Y坐標點對象到服務器上,并且被廣播給其他所有已連接的客戶端。SignalR將使用JSON來序列化該對象。

我們創建了一個ShapeModel類來作為坐標屬性的容器,它包含了形狀位置的信息。同時,我們需要指定那些客戶僅作為消息的接收端。所以服務器上 的對象還包含一個成員跟蹤那些客戶端的數據被儲存。這樣,指定的客戶端才不會發送它自己的形狀坐標數據到服務器上。該成員使用JsonIgnore屬性, 防止它被序列化并被發送到客戶端。

3.在應用程序啟動時啟用集線器:

1) 我們將把設置在應用程序啟動時,自動啟用集線器映射。在SignalR2.0中,這是通過增加OWIN啟動類來實現的。啟動類的配置方法中會調用MapSigalR方法,同時啟動類會使用Assembly特性來將啟動類注冊到OWIN的啟動處理過程中。

在解決方案資源管理器中,添加一個OWIN啟動類,將其命名為Startup并添加。

2)使用一下的代碼替換Startup類的內容:

using Microsoft.Owin;

using Owin;

[assembly: OwinStartup(typeof(MoveShapeDemo.Startup))]

namespace MoveShapeDemo

{

public class Startup

{

public void Configuration(IAppBuilder app)

{

app.MapSignalR();

}

}

}

4.添加客戶端:

1)接下來,我們將添加客戶端。添加一個Html頁面,并且命名為Default.html帶項目中。

2)在解決方案資源管理器中,右擊剛剛添加的頁面,點擊設為起始頁。

3)用下面的代碼替換Html頁面中的:

<!DOCTYPE html>

<html>

<head>

<title>SignalR MoveShape Demo</title>

<style>#shape { width: 100px;height: 100px;background-color: #FF0000;}</style>

</head>

<body>

<script src="Scripts/jquery-1.10.2.min.js"></script>

<script src="Scripts/jquery-ui-1.10.4.min.js"></script>

<script src="Scripts/jquery.signalR-2.0.0.js"></script>

<script src="/signalr/hubs"></script>

<script>

$(function () {

var moveShapeHub = $.connection.moveShapeHub,

$shape = $("#shape"),

shapeModel = { left: 0, top: 0 };

moveShapeHub.client.updateShape = function (model) {

shapeModel = model;

$shape.CSS({ left: model.left, top: model.top });

};

$.connection.hub.start().done(function () {

$shape.draggable({

drag: function () {

shapeModel = $shape.offset();

moveShapeHub.server.updateModel(shapeModel);

}

});

});

});

</script>

<div id="shape" />

</body>

</html>

意:請檢查代碼中所引用的腳本是否同腳本文件夾中的一致:

上面的Html和JS代碼創建了一個紅色的Div,id為Shape。在Shape拖動時,將觸發它的drag事件,并將Div的位置發送給服務器。

4) 按下F5啟動應用程序,復制頁面的URL并打開一個新的瀏覽器,粘貼并打開,拖動一個瀏覽器的窗口中的形狀,另一個瀏覽器的形狀位置也將同步進行更新。

5.添加服務器循環:

在目前的應用中,每當服務器接收到新的消息時,都會將它們廣播到所有的客戶端上。同客戶端的問題一樣:消息總是不斷發送,而不是在需要時才發送,并且可能導致連接被結果淹沒。以下服務器代碼就是為了解決這一問題:已實現節流出書消息的速率定時器(減少并發,防止不斷并發而導致連接的實例沒創建,就要發送,導致發送失敗,也可以防止并發連接和并發推送消息太多,導致同一時間資源占用過多,)。

1)使用以下代碼更新MoveShapeHub:

using System;

using System.Threading;

using Microsoft.AspNet.SignalR;

using Newtonsoft.Json;

namespace MoveShapeDemo

{

public class Broadcaster

{

private readonly static Lazy<Broadcaster> _instance =

new Lazy<Broadcaster>(() => new Broadcaster());

// We're going to broadcast to all clients a maximum of 25 times per second

private readonly TimeSpan BroadcastInterval =

TimeSpan.FromMilliseconds(40);

private readonly IHubContext _hubContext;

private Timer _broadcastLoop;

private ShapeModel _model;

private bool _modelUpdated;

public Broadcaster()

{

// Save our hub context so we can easily use it

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产第二页| 91精品国产综合久久香蕉最新版| 国产精品白嫩美女在线观看| 久热精品在线视频| 中文字幕久热精品在线视频| 国产亚洲精品成人av久久ww| 欧美疯狂做受xxxx高潮| 亚洲欧美国产视频| 亚洲aⅴ日韩av电影在线观看| 久久综合88中文色鬼| 一本色道久久综合狠狠躁篇怎么玩| 91精品国产自产91精品| 欧美色视频日本高清在线观看| 91精品国产91久久久| 亚洲成色999久久网站| 日韩精品高清视频| 亚洲а∨天堂久久精品9966| 日韩免费在线视频| 亚洲精品久久在线| 精品久久久中文| 少妇高潮久久77777| 亚洲热线99精品视频| 欧美丰满少妇xxxxx做受| 亚洲精品久久久久久久久久久久| 日韩美女福利视频| 欧美日韩国产一区二区| 国产精品久久一| 欧美日本国产在线| 亚洲图片欧洲图片av| 日韩在线视频国产| 中文字幕亚洲天堂| 亚洲欧洲第一视频| 欧美极品少妇xxxxⅹ喷水| 精品一区二区电影| 日韩av片电影专区| 2019亚洲男人天堂| 91亚洲一区精品| 国产精品狼人色视频一区| 欧洲美女7788成人免费视频| 欧美性感美女h网站在线观看免费| 国产精品91久久久| 成人免费网视频| 久久久久久久香蕉网| 成人性生交大片免费看小说| 国产精品久久久久久久久免费看| 亚洲免费一在线| 亚洲jizzjizz日本少妇| 精品国产区一区二区三区在线观看| 热久久美女精品天天吊色| 欧美日韩国产中字| 成人免费高清完整版在线观看| 欧美精品免费在线观看| 亚洲深夜福利网站| 国产精品91久久| 日韩一二三在线视频播| 亚洲国产97在线精品一区| 亚洲一区国产精品| 26uuu日韩精品一区二区| 精品久久久一区| 日韩一级裸体免费视频| 97精品国产97久久久久久| 国产精品久久一| 久久久久久久久91| 高清欧美性猛交xxxx黑人猛交| 亚洲最大激情中文字幕| 久久理论片午夜琪琪电影网| 久久人人爽国产| 91免费国产视频| 亚洲图片在区色| 日韩综合视频在线观看| 久久综合免费视频| 在线播放国产一区二区三区| 成人欧美在线视频| 91精品国产自产在线| 国产精品女主播| 亚洲a在线观看| 国产成人+综合亚洲+天堂| 国产日韩欧美一二三区| 亚洲成人精品在线| 日韩中文字幕在线免费观看| 日韩精品中文字幕有码专区| 97婷婷涩涩精品一区| 在线日韩日本国产亚洲| 国产精品视频久| 91日韩在线视频| 日韩精品久久久久久福利| 日韩在线视频二区| 国产精品一二区| 久久精品国产久精国产思思| 91理论片午午论夜理片久久| 国产精品自拍网| 亚洲国产精品成人va在线观看| 国模视频一区二区三区| 国产精品爱久久久久久久| 亚洲一区二区久久久| 国产亚洲精品美女久久久| 亚洲影院在线看| 欧美激情一二三| 91大神福利视频在线| 一本一本久久a久久精品综合小说| 国产精品久久久精品| 国产99视频精品免视看7| 成人两性免费视频| 最新国产精品拍自在线播放| 97超级碰碰人国产在线观看| 亚洲少妇中文在线| 国产精品久久久久高潮| 色老头一区二区三区| 亚洲www视频| 精品少妇v888av| 国产欧美日韩综合精品| 日韩欧美精品网站| 国产日韩综合一区二区性色av| 中文字幕亚洲欧美日韩高清| 欧美日韩亚洲国产一区| 亚洲第一av网| 欧美激情视频网站| 欧美精品成人在线| 国产噜噜噜噜噜久久久久久久久| 欧美性xxxxx| 成人a在线视频| 亚洲片av在线| 国产日产欧美a一级在线| 69精品小视频| 久久人人爽人人爽爽久久| 欧美裸体xxxxx| 久久综合免费视频| 欧美在线视频一区| 久久久久日韩精品久久久男男| 久久伊人精品天天| 久久久久久久久久久网站| 91精品在线播放| 欧美日在线观看| 91在线观看免费观看| 亚洲第一av网| 91av福利视频| 国产精品日韩电影| 久久久久久91| 国产精品久久av| 国产成人精品a视频一区www| 国产一区二区av| 亚洲人成网站免费播放| 中文字幕亚洲综合| 91久久嫩草影院一区二区| 亚洲色图日韩av| 亚洲精品按摩视频| 国产色婷婷国产综合在线理论片a| 国产日韩在线精品av| 国产精品久久久久久久久久久久久| 亚洲欧美激情另类校园| 国产精品啪视频| 午夜精品www| 亚洲精品97久久| 国产午夜一区二区| 97视频在线免费观看| 91久久精品视频| 海角国产乱辈乱精品视频| 久久久久久久999精品视频| 视频在线观看99| 国产又爽又黄的激情精品视频| 亚洲成人av资源网| 亚洲精品国产综合久久| 国产精品精品视频一区二区三区| 欧美性xxxxxxxxx|