gpt4 book ai didi

asp.net-mvc-4 - 调用客户端时,信号器服务器端方法是否应该异步?

转载 作者:行者123 更新时间:2023-12-03 10:37:30 25 4
gpt4 key购买 nike

我正在关注以下“SignalR 教程”:http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server

所以让我们假设这个简单的聊天方法:

public void Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
Clients.All.addNewMessageToPage(name, message);
}

假设我有一个拥有 50 000 个用户的聊天室。将 Send 方法更改为异步是否有任何好处,如下所示:
 public async Task Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
await Clients.All.addNewMessageToPage(name, message);
}
  • IIS 是否会保留当前请求(发布该请求的用户的请求)
    聊天)并等到每个客户都收到通知?
  • 对“客户端”的调用是否在后台完全异步并且请求是
    此时发布?

  • 谢谢!

    最佳答案

    您应该等待任务的唯一原因是当您使用横向扩展时。默认情况下,内存消息总线返回一个已完成的任务,因为操作太快了,没有必要让它异步,但如果你愿意,你可以。回答您的问题:

  • 我们不会在执行方法调用的同一调用堆栈上发送给客户端(例如,Clients.All.addNewMessage 除了发布到消息总线之外不等待任何事情)。没有请求线程会等待客户端接收任何东西(我们不支持等待客户端在 SignalR 中获取消息以进行正常调用)。
  • 即使您不在调用站点使用 await,它也始终是异步的。我们有一个消息代理,它实际上会向客户端写入数据。当您调用该方法时,您只是将一条消息放入缓冲区。在 future 的某个时间,该消息会传递给客户端。

  • 在横向扩展场景中,调用客户端方法会向外部服务(sql、redis、服务总线)发送一条消息,该消息可能会失败,因此您希望等待任务以便观察异常。

    希望有帮助

    关于asp.net-mvc-4 - 调用客户端时,信号器服务器端方法是否应该异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19193451/

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