gpt4 book ai didi

SignalR 无法向所有连接的客户端发送消息

转载 作者:行者123 更新时间:2023-12-04 20:33:21 25 4
gpt4 key购买 nike

我正在尝试使用 SignalR 向所有连接的客户端发送消息。

我找到了几个例子并添加了我认为是所有必需的部分。我确实成功地让我的客户端连接到我的集线器。我无法让我的服务器连接到我的集线器并向所有连接的客户端发送消息。

当我调用 DatabaseChangeListener::Notify() 时,它从未命中 Hub 中的代码。

谁能建议我还需要做什么?

我在带有 React 和 Redux 的 Web 应用程序中使用 .NET Core 2.1 预览版 2。

我正在使用 SignalR 1.0.0-preview2-final

我正在使用 SignalR.Client 1.0.0-preview2-final

在 Startup.cs 中

    public void ConfigureServices(IServiceCollection services)
{
// remove all other code for this question
services.AddSignalR();
}

public void Configure(IApplicationBuilder app)
{
// remove all other code for this question
app.UseSignalR(routes =>
{
routes.MapHub<SignalRHub>("/hubs/update");
});
}

我的中心

    [Authorize]
public class SignalRHub : Hub
{
public async Task Send(string message)
{
await Clients.All.SendAsync("SendMessage", Context.User.Identity.Name, message);
}
}

我的类(class)通知客户

public class DatabaseChangeListener : IDatabaseChangeListener
{
private readonly IHubContext<SignalRHub> _hubContext;

public DatabaseChangeListener(IHubContext<SignalRHub> hubContext)
{
_hubContext = hubContext;

}

public void Notify()
{
_hubContext.Clients.All.SendAsync("SendMessage", "something changed, Yo");
}
}

最佳答案

您需要通过客户端连接到集线器,然后使用您的 _hubContext,您应该能够根据与集线器的连接向客户端发送消息。

使用 JS 从客户端连接到集线器。

    const connection = new signalR.HubConnectionBuilder()
.withURL("/YourHub")
.build();

然后在建立连接后,您也可以使用JS 制作从服务器向客户端发送消息的方法。

    connection.on("SendMessage", message => {
document.getElementById("IdOfElementToDisplayMessage").innerHTML = message;
});

最后补充:

    connection.start().catch(err => console.error(err.toString()));

现在您已经通过客户端建立了到集线器的连接,现在可以从 IHubContext 引用到集线器的连接。要从服务器向客户端发送消息,您可以使用 _hubContext

在您的情况下,您可以调用 Notify() 然后调用 await _hubContext.Clients.All.SendAsync("SendMessage", "something changed, Yo"); 这应该将您的消息发送到在 JS 中创建的 SendMessage 方法:connection.on("SendMessage", message => { ...

如果您的 _hubContext 变量在执行期间为空,则需要检查 IHubContext 的注入(inject)。

关于SignalR 无法向所有连接的客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49889722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com