亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Asp.net中利用SignalR實現一個聊天室功能

發布時間:2021-01-04 16:45:48 來源:億速云 閱讀:208 作者:Leah 欄目:開發技術

本篇文章為大家展示了如何在Asp.net中利用SignalR實現一個聊天室功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

實現思路

  要想實現群聊的功能,首先我們需要創建一個房間,然后每個在線用戶可以加入這個房間里面進行群聊,我們可以為房間設置一個唯一的名字來作為標識。那SignalR類庫里面是否有這樣現有的方法呢?答案是肯定的。

// IGroupManager接口提供如下方法
// 作用:將連接ID加入某個組
// Context.ConnectionId 連接ID,每個頁面連接集線器即會產生唯一ID
// roomName分組的名稱
Groups.Add(Context.ConnectionId, roomName);

// 作用:將連接ID從某個分組移除
Groups.Remove(Context.ConnectionId, roomName);

// IHubConnectionContext接口提供了如下方法
// 調用客戶端方法向房間內所有用戶群發消息 
// Room:分組名稱
// new string[0]:過濾(不發送)的連接ID數組
 Clients.Group(Room, new string[0]).clientMethod

  上面的代碼也就是實現群聊的核心方法。Groups對象說白了也就是SignalR類庫維護的一個列表對象而已,其實我們完全可以自己來維護一個Dictionary<string, List<string>>這個對象,創建一個房間的時候,我們將房間名稱和進入房間的客戶端的ConnectionId加入到這個字典里面,然后在聊天室里面點發送消息的時候,我們根據房間名查找到所有加入群聊的ConnectionId,然后調用Clients.Clients(IList<string> connectionIds)方法來將消息群發到每個客戶端。以上也就是實現聊天室的原理。

使用SignalR實現聊天室的功能
理清楚了實現思路之后,接下來我們就看下具體的實現代碼,同時大家也可以對照代碼來對照前面的實現思路。
首先看下聊天室功能所涉及實體類的實現代碼:

/// <summary>
 /// 用戶類
 /// </summary>
 public class User
 {
  /// <summary>
  /// 用戶Id
  /// </summary>
  public string UserId { get; set; }

  /// <summary>
  /// 用戶的連接集合
  /// </summary>
  public List<Connection> Connections { get; set; }

  /// <summary>
  /// 用戶房間集合,一個用戶可以加入多個房間
  /// </summary>
  public List<ChatRoom> Rooms { get; set; }

  public User()
  {
   Connections = new List<Connection>();
   Rooms = new List<ChatRoom>();
  }
 }

 public class Connection
 {
  //連接ID
  public string ConnectionId { get; set; }

  //用戶代理
  public string UserAgent { get; set; }
  //是否連接
  public bool Connected { get; set; } 
 }

  /// <summary>
 /// 房間類
 /// </summary>
 public class ChatRoom
 {
  // 房間名稱
  public string RoomName { get; set; }

  // 用戶集合
  public List<User> Users { get; set; }

  public ChatRoom()
  {
   Users = new List<User>();
  }
 }

 /// <summary>
 /// 上下文類,用來模擬EF中的DbContext
 /// </summary>
 public class ChatContext
 {
  public List<User> Users { get; set; }

  public List<Connection> Connections { get; set; }

  public List<ChatRoom> Rooms { get; set; }

  public ChatContext()
  {
   Users = new List<User>();
   Connections = new List<Connection>();
   Rooms = new List<ChatRoom>();
  }
 }

上述內容就是如何在Asp.net中利用SignalR實現一個聊天室功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀柔区| 体育| 丰镇市| 乐亭县| 嘉黎县| 池州市| 得荣县| 枣强县| 南陵县| 平罗县| 屏边| 扎赉特旗| 凤阳县| 新蔡县| 安仁县| 阆中市| 榕江县| 博罗县| 思南县| 芦山县| 齐河县| 侯马市| 和硕县| 利川市| 江都市| 山阳县| 永泰县| 恭城| 鄢陵县| 双城市| 三原县| 武平县| 广平县| 高密市| 威海市| 乡城县| 渭南市| 万全县| 思南县| 沂源县| 吉首市|