可以使用 SignalR 向特定用户发送消息吗?
It is possible to send a message to a specific user using SignalR?
我是 SignalR 的新手,最近我正在检查和学习以下代码的工作原理。
我想知道使用前面 link 中的代码向特定用户发送消息的最简单方法是什么。有没有人有经验或试图做同样的事情?我只是需要一些想法,因为我不知道 SignalR 提供的所有功能和方法。
在我的网络应用程序中,用户有一个唯一的用户名,我需要使用该数据进行连接。我看到有一种方法可以创建组并以这种方式发送消息,但我不完全理解,一个非常简单的例子对我有很大帮助。
你能帮助我或给我一些建议吗?谢谢
public class MyHub : Hub
{
public void Send(string userId, string message)
{
Clients.User(userId).send(message);
}
}
我已经在写博客了here
所以基本上你需要
首先像这样定义一个集线器方法
public async Task Send(string userId)
{
var message = $"Send message to you with user id {userId}";
await Clients.Client(userId).SendAsync("ReceiveMessage", message);
}
添加到startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSignalR(routes =>
{
routes.MapHub<ConnectionHub>("/connectionHub");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
然后终于
(function () {
var connection = new signalR.HubConnectionBuilder().withUrl("/connectionHub").build();
connection.start().then(function () {
console.log("connected");
connection.invoke('getConnectionId')
.then(function (connectionId) {
sessionStorage.setItem('conectionId', connectionId);
// Send the connectionId to controller
}).catch(err => console.error(err.toString()));;
});
$("#sendmessage").click(function () {
var connectionId = sessionStorage.getItem('conectionId');
connection.invoke("Send", connectionId);
});
connection.on("ReceiveMessage", function (message) {
console.log(message);
});
})();
首先,我需要使用
与服务器建立连接
new signalR.HubConnectionBuilder().withUrl(“/connectionHub”).build()
然后当连接开始时,我将调用 getConnectionId 来获取服务器中的用户连接 ID 并存储到会话存储中,因为当我们刷新浏览器时,signalR 服务器将为您提供新的连接 ID
下一步,当我点击按钮时,我将调用服务器中的 Send 方法,我将监听
关于“ReceiveMessage”
using connection.on(“ReceiveMessage”);
我是 SignalR 的新手,最近我正在检查和学习以下代码的工作原理。
我想知道使用前面 link 中的代码向特定用户发送消息的最简单方法是什么。有没有人有经验或试图做同样的事情?我只是需要一些想法,因为我不知道 SignalR 提供的所有功能和方法。
在我的网络应用程序中,用户有一个唯一的用户名,我需要使用该数据进行连接。我看到有一种方法可以创建组并以这种方式发送消息,但我不完全理解,一个非常简单的例子对我有很大帮助。
你能帮助我或给我一些建议吗?谢谢
public class MyHub : Hub
{
public void Send(string userId, string message)
{
Clients.User(userId).send(message);
}
}
我已经在写博客了here
所以基本上你需要
首先像这样定义一个集线器方法
public async Task Send(string userId)
{
var message = $"Send message to you with user id {userId}";
await Clients.Client(userId).SendAsync("ReceiveMessage", message);
}
添加到startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSignalR(routes =>
{
routes.MapHub<ConnectionHub>("/connectionHub");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
然后终于
(function () {
var connection = new signalR.HubConnectionBuilder().withUrl("/connectionHub").build();
connection.start().then(function () {
console.log("connected");
connection.invoke('getConnectionId')
.then(function (connectionId) {
sessionStorage.setItem('conectionId', connectionId);
// Send the connectionId to controller
}).catch(err => console.error(err.toString()));;
});
$("#sendmessage").click(function () {
var connectionId = sessionStorage.getItem('conectionId');
connection.invoke("Send", connectionId);
});
connection.on("ReceiveMessage", function (message) {
console.log(message);
});
})();
首先,我需要使用
与服务器建立连接new signalR.HubConnectionBuilder().withUrl(“/connectionHub”).build()
然后当连接开始时,我将调用 getConnectionId 来获取服务器中的用户连接 ID 并存储到会话存储中,因为当我们刷新浏览器时,signalR 服务器将为您提供新的连接 ID
下一步,当我点击按钮时,我将调用服务器中的 Send 方法,我将监听 关于“ReceiveMessage”
using connection.on(“ReceiveMessage”);