1. SignalRクライアントライブラリを追加します。
プロジェクトを右クリック - >「追加」を選択>「クライアントライブラリ」
プロバイダの選択:unpkg 、バンクセレクト:@ ASPNET / SignalR @ 1.1.4
「DIST /ブラウザ」フォルダを展開し、「signalr.js」と「signalr.min.jsを」選択「特定のファイルを選択する」を選択
あなたは、特定の場所を選択することができます
ハブハブを定義します。2.
MessageHubと継承ハブを作成します。ハブクラスは、接続、およびグループメッセージを管理します
使用してSystem.Collections.Genericを。 使用してSystem.Threading.Tasksを。 使用してMicrosoft.AspNetCore.SignalRを。 名前空間NetCoreWebApi.SignalR { /// <要約> /// メッセージ集线器 /// </要約> パブリック クラスMessageHub:ハブ { /// <要約> /// 存放已连接信息 /// </要約> 公共 静的な 読み取り専用辞書< 文字列、文字列 >接続= 新しい辞書< 文字列、文字列 >(); /// <要約> /// 发送消息 /// </要約> /// ます。<param name = "loginNo"> </ param>の /// <PARAM NAME = "メッセージ"> </ param>の // / <リターン> </戻り> 公共の 非同期タスクのSendMessage(ストリング loginNo、文字列メッセージ) { Connections.TryGetValue(loginNo、アウト 列のclientId)。 // ReceiveMessage客户端接受方法 のawait Clients.Client(のclientId).SendAsync(" ReceiveMessage " 、メッセージ)。 <概要> /// クライアントのログイン・ユーザー・アカウントと正常に保存され、クライアント同上 /// </要約> /// ます。<param name = "loginNo"> </ param>の 公共 無効 SendLogin(文字列loginNo) { // 分析ユーザ着弾していない(Idを介してユーザ名及びログインを挿入しないで、ログインユーザ名、及びIdを変更することによって) IF(!Connections.ContainsKey(loginNo)) { Connections.Add(loginNo、Context.ConnectionId); } 他 { 接続[loginNo] = Context.ConnectionId; } } } }
3.設定SignalR
私たちは、必要がStartup.csはクラス開始ConfigureServicesで登録SignalRサービス
services.AddSignalR();
セットSignalRルート
// カスタムクラスMessageHubにセットSignalR経路 app.UseSignalR(ルート=> { route.MapHub <MessageHub>(" / MessageHub " ); });
注:UseSignalR 必要 UseMvcの 前にコール!
4.準備SignalRのクライアントコード
参考signalr.js HTMLにライブラリファイル
<!DOCTYPE HTML > < HTML > < ヘッド> </ ヘッド> < ボディ> < divのスタイル= "テキスト整列:センター;マージントップ:5%" > < 入力タイプ= "テキスト" ID = "メッセージ" プレースホルダ=」消息」 /> < ボタンタイプ= "ボタン" ID = "及びSendBtn" >发送</ ボタン> </ DIV > <= "../リソース/ libに/ SignalR / DIST /ブラウザ/ signalr.js" > </ スクリプト> </ ボディ> </ HTML > < スクリプト> のvar 接続= 新しい新signalR.HubConnectionBuilder() // 設定ルート .withUrl (" / MessageHub " ) // ログ情報 .configureLogging(signalR.LogLevel.Information) // 作成 .build(); // メッセージ受け入れ connection.onを(" ReceiveMessage " 、(メッセージ)=>{ 警告(" 收到消息===> " + メッセージ)。 }); // 发送消息 のdocument.getElementById(" 及びSendBtn " ).addEventListener(" クリック" 、機能(){ VARのメッセージ= のdocument.getElementById(' メッセージ' ).VALUE; connection.invoke(" のSendMessage " 、" tenghao510 @ QQ。 COM 」、メッセージ)。キャッチ(ERR => console.error(ERR。 ); }); // 开始连接 。connection.start()は(E => { connection.invoke(" SendLogin " 、" [email protected] " 。)キャッチ(ERR => console.error(err.toString()) )。 })。キャッチ(ERR => console.error(err.toString())); </ スクリプト>
5.プログラムを実行します。
htmlページを開き、以下の情報は、接続がコンソールに成功した説明に印刷されて参照するにはF12。
テキストを入力し、送信ボタンをクリックしてください。(I警告ここで、他の要件は、コールバック内部メッセージ処理ロジックで受信することができる場合)
コントローラからの情報の6普及
また、ハブに外からメッセージを送信することができます。
コントローラを使用するときは、注入する必要がある IHubContextの インスタンスを。
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using NetCoreWebApi.SignalR; namespace NetCoreWebApi.Controllers { /// <summary> /// SignalR推送 /// </summary> [Route("api/hub")] [ApiController] public class HubController : Controller { private readonly IHubContext<MessageHub> _hubContext; /// <summary> /// 构造函数 /// </summary> /// <param name="hubClients"></param> public HubController(IHubContext<MessageHub> hubClients) { _hubContext = hubClients; } /// <summary> /// 测试SignalR推送 /// </summary> /// <param name="loginNo"></param> [HttpGet] [Route("pushMsg")] public void PushMsg(string loginNo) { if (string.IsNullOrWhiteSpace(loginNo)) { //给所有人推送消息 _hubContext.Clients.All.SendAsync("ReceiveMessage", "这是控制器发送的消息"); } else { //给指定人推送 MessageHub.Connections.TryGetValue(loginNo, out string id); _hubContext.Clients.Client(id).SendAsync("ReceiveMessage", "这是控制器发送的消息"); } } } }
调用接口测试