SignalR學習筆記(一) 簡單聊天室

2022-01-19 19:53:32 字數 1680 閱讀 7028

asp.net signalr是乙個方便程式設計師新增實時網路通訊功能的類庫。所謂的實時網路通訊功能(real-time web functionality)就是需要伺服器主動推送資料到使用者客戶端,而非伺服器等待使用者客戶端請求資料的功能。以聊天室為例,當乙個使用者傳送**訊息之後,在所有使用者的聊天視窗中都需要顯示出這條訊息,如果每個使用者客戶端都是用ajax每隔一定時間去伺服器上拉取訊息,那樣不僅效率低下並增加伺服器負擔,也不是真正意義上的實時程式。

asp.net signalr使用新的websocket傳輸協議,他實現了瀏覽器和伺服器全雙工通訊(允許伺服器主動發訊息給客戶端),並相容以前的長連線(long poll)傳輸方式, 所以對於開發人員來說,不需要自己去維護使用何種傳輸方式,signalr會自動根據客戶端瀏覽器的版本自動切換訊息傳輸方式

signalr api包含2個模型來幫助客戶端與伺服器進行通訊: 持久連線(persistent connections)與樞紐 (hubs).

持久連線負責傳輸訊息,樞紐提供了一種很有趣的機制,允許開發人員在客戶端呼叫伺服器端方法或伺服器端呼叫客戶端方法。

當伺服器端程式呼叫客戶端方法時,乙個包含客戶端方法名及引數的json資料報會通過持久連線傳輸到客戶端,客戶端會根據資料報中的方法名進行匹配,如果找到相同方法名的方法,就會自動呼叫找到的方法,方法所需的引數值會使用資料報中對應的引數值。

下面用乙個聊天室的例子,熟悉一下signalr的基本使用方式。

這個聊天室頁面的需求如下:

使用者開啟聊天室頁面,需要首先錄入自己的暱稱,輸入暱稱之後,通知聊天室的其他使用者該使用者進入聊天室

使用者可以使用在聊天室中傳送公共訊息

使用者可以使用「to 使用者名稱 訊息內容」的方式傳送私聊訊息

展開package manager console面板,輸入

install-package microsoft.aspnet.signalr

using microsoft.owin;

using owin;

[assembly: owinstartup(typeof(chatroom.startup))]

namespace chatroom}}

在工程中新增chatroomhub.cs, 選擇signalr hub class(v2)

替換chatroomhub類中的內容替換

using microsoft.aspnet.signalr;

using system.collections.generic;

using system.linq;

namespace chatroom

進入聊天室。");

}public void send(string nickname, string message)

if (message.startswith("to") && message.split(' ').length == 3)}}

else}}

}}

新增空html檔案chatroom.html, 使用以下檔案替換

建立乙個簡單的signalr專案

1 新建乙個empty的mvc專案 2 如果沒有安裝過signalr過那麼要通過nuget安裝signalr 3 新建乙個controller 然後建乙個view index 4 新建乙個signalr集線器類叫personhub 然後會看到裡面有乙個hello的預設的方法,5 然後在新建乙個owi...

簡單聊一下const

聯絡 define 不分配記憶體,給出的是立即數,只是簡單的替換。有多少次使用就進行多少次拷貝替換,在記憶體中會有多個拷貝,消耗記憶體大 const 在靜態儲存區中分配空間,在程式執行過程中記憶體中只有乙個拷貝 更多的戳這裡和那裡 這裡 那裡const m 10 m 的值不能在程式中被修改 但可以通...

學習篇 今天聊一聊一種學習方法 覆盤

引言 自己不是個聰明的人,從小學習效率就不是很高 開悟的比較晚,直到考研那會才開始悟出知道如何有效學習。從業以來,面對不熟悉的事物,也在探索一種行之有效地學習方法。最近一直在學習 嘗試一種新的學習理論 覆盤。那,今兒就來聊一聊 覆盤 的這點事。文章大綱 1.啥是覆盤 2.覆盤有啥用?3.覆盤和總結有...