Asp Net Core 2.1におけるSignalR運用
3861 ワード
前のプロジェクトの作成とSignalRの引用はマイクロソフトの公式文書にあります.私達は概説を行いません.今日は主にクライアントの接続と断線、単数対のメッセージを見ます.
まず登録と切断の過程で、JavaScriptから情報を送って、サーバーのConteextにこれらのデータを保存して、ユーザー名の状況によってDictoraryに保存します.
皆さんの読書に感謝しています.また、収穫を期待しています.貴重な意見やアドバイスをしてくれて、より多くの人が技術という道を広く歩まれます.
まず登録と切断の過程で、JavaScriptから情報を送って、サーバーのConteextにこれらのデータを保存して、ユーザー名の状況によってDictoraryに保存します.
//JavaScript
var connection;
$(function () {
var userName"***";
//
connection = new signalR.HubConnectionBuilder().withUrl("/chatHub?userName="+ userName ).build();
//
connection.on("ReceiveMessage", function (result) {alert(result); });
// SignalR
connection.start().catch(function(err){alert(err.toString());}).then(function () {});
});
public class ChatHub : Hub
{
// ID
private static Dictionary_connections=new Dictionary();
//
public override Task OnConnectedAsync()
{
string userName = Context.GetHttpContext().Request.Query["userName"];
string pwd = Context.GetHttpContext().Request.Query["pwd"];
if (_connections.ContainsKey(userName)) {
if (UserInfo.userPwd.ContainsKey(userName))
{
Clients.Caller.SendAsync("ReceiveMessage", " !");
// ( Add , )
SendLogin(userName, comip);
}
else
{
Clients.Caller.SendAsync("ReceiveMessage", " !");
// ( Add , )
SendLogin(userName, comip);
}
}
return base.OnConnectedAsync();
}
// Id
public void SendLogin(string username)
{
// ( Id, Id)
if (!_connections.ContainsKey(username))
{
_connections(username, Context.ConnectionId);
}
else
{
_connections[username]= Context.ConnectionId;
}
}
//
public override Task OnDisconnectedAsync(Exception exception)
{
// ,
var a = Context.ConnectionId;// Id
List dik = valeToKey(_connections, a);// Id
if (dik.Count == 1)
{
_connections.Remove(dik[0]);//
}
return base.OnDisconnectedAsync(exception);
}
// value key
public List valeToKey(Dictionarydkv,string vle)
{
List resultKey = new List();
foreach (var key in dkv.Keys)
{
if (dkv[key] == vle)
{
resultKey.Add(key);
}
}
return resultKey;
}
}
メッセージの送信には様々な種類がありますが、グループ送信(Clients()-転送はすべて送信するクライアントId)、単発(Client)-参は送信するId)、およびすべての送信(All)が使用できます./**
**
** SendByNumber
*/
var user="********";//
var information="xxxxxxxx";//
connection.invoke("SendByNumber", user, information).catch(function (err) {
return console.error(err.toString());
});
/** **/
connection.on("Seddgfsx", function (fhx) {
alert(fhx);
});
public async Task SendByNumber(string user,string information)
{
string userId = sctConnections(user);
await Clients.Client(_connections[user]).SendAsync("Seddgfsx", information);
}
メッセージを送る原理は実はとても簡単で、JavaScript方法でサーバの方法を呼び出して、サーバーがuserを通じて(通って)Idであることを発見して、更にこのIdを使ってこのクライアントを呼び出す方法でメッセージを彼に伝えます.皆さんの読書に感謝しています.また、収穫を期待しています.貴重な意見やアドバイスをしてくれて、より多くの人が技術という道を広く歩まれます.