Signalr 通过信号器将消息推送到多个客户端

Signalr 通过信号器将消息推送到多个客户端,signalr,Signalr,我有一个聊天应用程序,我必须在其中向对话中的所有其他用户推送消息,当我将消息推送到100个以上的所有客户端时,signalr工作正常,但当我在这100个连接上循环并单独发送消息时,消息在客户端的接收速度会变慢,当我开始加快消息推送速度时,我的服务器IIS工作程序将达到100%的CPU使用率,客户端的消息接收速度会变慢 因此,请帮助我找到一种最好的方式,从signalr向特定用户发送消息,同时发送100多个用户的消息。如果是聊天应用程序,您可能需要查看。只需为每个“对话”创建一个新组,并将用户加入

我有一个聊天应用程序,我必须在其中向对话中的所有其他用户推送消息,当我将消息推送到100个以上的所有客户端时,signalr工作正常,但当我在这100个连接上循环并单独发送消息时,消息在客户端的接收速度会变慢,当我开始加快消息推送速度时,我的服务器IIS工作程序将达到100%的CPU使用率,客户端的消息接收速度会变慢


因此,请帮助我找到一种最好的方式,从signalr向特定用户发送消息,同时发送100多个用户的消息。

如果是聊天应用程序,您可能需要查看。只需为每个“对话”创建一个新组,并将用户加入该组

从文件中:

public class ContosoChatHub : Hub
{
    public Task JoinRoom(string roomName)
    {
        return Groups.Add(Context.ConnectionId, roomName);
    }

    public Task LeaveRoom(string roomName)
    {
        return Groups.Remove(Context.ConnectionId, roomName);
    }
}
然后,您只需向小组发送消息:

Clients.Group(groupName).addChatMessage(name, message);

如果它是一个聊天应用程序,您可能需要查看。只需为每个“对话”创建一个新组,并将用户加入该组

从文件中:

public class ContosoChatHub : Hub
{
    public Task JoinRoom(string roomName)
    {
        return Groups.Add(Context.ConnectionId, roomName);
    }

    public Task LeaveRoom(string roomName)
    {
        return Groups.Remove(Context.ConnectionId, roomName);
    }
}
然后,您只需向小组发送消息:

Clients.Group(groupName).addChatMessage(name, message);

在我的情况下,我会根据某些要求为该对话中的所有其他用户生成单独的消息,为此,我无法将相同的消息推送到该对话中的所有用户,我是否可以尝试其他方法?您能否告诉我SignalR是否能够一次向大约200个客户单独发送消息?我的服务器配置是windows server 2012,8gb ram,Xeon(R)2.2 ghz我之所以问这个问题,是因为如果我为信号器组实现了一些功能,但如果有100个对话有2到3个用户,并且所有用户都在同一时间推送消息,那么它的行为方式将与现在相同。在我的情况下,我会根据一些用户的不同,为对话中的所有其他用户生成单独的消息要求,并且出于这个目的,我不能将同一条消息推送到该对话中的所有用户,还有什么我可以尝试的吗?您能告诉我SignalR是否能够一次单独向大约200个客户发送消息?我的服务器配置是windows server 2012,8gb ram,Xeon(R)2.2 ghz我之所以问这个问题,是因为如果我为信号器组实现了一些方法,但如果有100个对话有2到3个用户,并且所有用户都在同一时间推送消息,那么消息的行为将与现在相同,将调试器附加到进程并找出发生了什么(可能是无限循环?)。SignalR应该能够轻松处理1000个以上的连接。代码执行平稳,但我的iis以100%的cpu使用率缓慢地一个接一个地将消息推送到客户端,顺便说一句,我的服务器配置是windows server 2012,8gb ram,Xeon(R)2.2 ghz,它可以吗?100%的cpu使用率表明其中一个线程上存在无限紧循环。由于您的处理器有多个内核,它仍在进行一些处理(因此将响应推送到客户端),但由于紧循环正在窃取资源,因此发生的速度要慢得多。我发现问题出在redis背板上,当我移除redis用作背板时,它工作正常,你对此有何想法,我需要使用redis,因为我必须使用多台机器redis背板最近已从BookSleeve迁移到StackExchange。redis,但尚未发货。你能试试SignalR 2.2.0和Redis背板的夜间构建,看看这是否有帮助吗?或者,您可以等待2.2.0—应该不会太长。将调试器附加到进程,并了解发生了什么(可能是无限循环?)。SignalR应该能够轻松处理1000个以上的连接。代码执行平稳,但我的iis以100%的cpu使用率缓慢地一个接一个地将消息推送到客户端,顺便说一句,我的服务器配置是windows server 2012,8gb ram,Xeon(R)2.2 ghz,它可以吗?100%的cpu使用率表明其中一个线程上存在无限紧循环。由于您的处理器有多个内核,它仍在进行一些处理(因此将响应推送到客户端),但由于紧循环正在窃取资源,因此发生的速度要慢得多。我发现问题出在redis背板上,当我移除redis用作背板时,它工作正常,你对此有何想法,我需要使用redis,因为我必须使用多台机器redis背板最近已从BookSleeve迁移到StackExchange。redis,但尚未发货。你能试试SignalR 2.2.0和Redis背板的夜间构建,看看这是否有帮助吗?或者,您可以等待2.2.0—应该不会太长。