ハブではなく、SignalR/PersistentConnectionを使用しています。
サーバーからクライアントにメッセージを送信したい。送信するクライアントIDを持っていますが、サーバーからクライアントにメッセージを送信するにはどうすればよいですか?
たとえば、サーバーで何らかのイベントが発生した場合、特定のユーザーに通知を送信する必要があります。
何か案は?
ハブではなく、SignalR/PersistentConnectionを使用しています。
サーバーからクライアントにメッセージを送信したい。送信するクライアントIDを持っていますが、サーバーからクライアントにメッセージを送信するにはどうすればよいですか?
たとえば、サーバーで何らかのイベントが発生した場合、特定のユーザーに通知を送信する必要があります。
何か案は?
githubページには、PersistentConnectionsを使用してこれを行う方法が示されています。
public class MyConnection : PersistentConnection {
protected override Task OnReceivedAsync(string clientId, string data) {
// Broadcast data to all clients
return Connection.Broadcast(data);
}
}
Global.asax
using System;
using System.Web.Routing;
using SignalR.Routing;
public class Global : System.Web.HttpApplication {
protected void Application_Start(object sender, EventArgs e) {
// Register the route for chat
RouteTable.Routes.MapConnection<MyConnection>("echo", "echo/{*operation}");
}
}
次に、クライアントで:
$(function () {
var connection = $.connection('echo');
connection.received(function (data) {
$('#messages').append('<li>' + data + '</li>');
});
connection.start();
$("#broadcast").click(function () {
connection.send($('#msg').val());
});
});
サーバー側のヘルプのAddToGroup関数である可能性があります
クライアントを別のチャネルに配置します
public bool Join(string channel)
{
AddToGroup(channel.ToString()).Wait();
return true;
}
その後、彼らは別のチャネルでメッセージを送信することができます
public void Send(string channel, string message)
{
String id = this.Context.ClientId;
Clients[channel.ToString()].addMessage(message);
}
using SignalR;
using SignalR.Hosting.AspNet;
using SignalR.Infrastructure;
public class MyConnection : PersistentConnection
{
}
public class Notifier
{
public void Notify(string clientId, object data) {
MyConnection connection = (MyConnection) AspNetHost.DependencyResolver
.Resolve<IConnectionManager()
.GetConnection<MyConnection>();
connection.Send(clientId, data);
}
}
https://github.com/SignalR/SignalR/wiki/PersistentConnection