簡體   English   中英

具有多個客戶端連接的signalR

[英]signalR with multiple client connections

我在使用SignalR的地方編寫了一個應用程序。 我正在從客戶端向服務器(控制器)發送connectionId。

單個瀏覽器一切正常(請求將通過connectionId =“ conn_1”發送到服務器),signalR僅向conn_1發送響應,但是當我打開新的瀏覽器並從該客戶端發送請求時,先前的連接將被釋放。 這意味着只有一個具有特定connectionId的連接保持活動狀態。

SignalR有什么方法無法處理並向他們發送想要的數據的響應?

我是SignalR的新手,真的很需要任何幫助或指導。

Angular SignalRService開始與服務器連接

  this.hubConnection = new signalR.HubConnectionBuilder()
    .withUrl(this.paymentDraftHubUrl)
    .build();

  return this.hubConnection
    .start()
    .then(() => this.hubConnectionStatus = 'Connection started')
    .catch(err => (this.hubConnectionStatus = 'Error while starting connection: ' + err));
}

從客戶端組件向Api發送connectionId

this.signalRService.startConnection().then((connection) => {
      this.connectionId = connection.toString();

      //Calling Api
      this.getAllTransactionException(
        this.connectionId,
        this.pageNumber,
        this.pageSize
}

C#中的MyHub類

public class PaymentDraftServiceHub : Hub, IPaymentDraftHub
{}

API的控制器使用計時器來保持調用存儲庫中的新數據,

[HttpGet]
[Route("GetCsrTranactions")]
public IActionResult GetCsrTranactions([FromQuery] TransactionExceptionDataRequest queryParams)
{
    TimeManager.Dispose();
    var timerManager = new TimeManager(async () =>
    await _paymentDraftHub.Clients.Clients.Client(queryParams.ConnectionId).SendAsync(SignalRConstants.TransferPaymentDraftServiceData, await _paymentTransactionRepository.GetCsrTranactionsAsync(queryParams)));
    var response = new ResponseMessage { Message = "Accepted", Code = "201" };
    return Ok(response);
}

如果客戶端從多個瀏覽器窗口或選項卡進行連接,則客戶端可以具有多個具有多個連接ID的連接。

根據您提供的代碼,我們可以發現您只是將當前活動瀏覽器選項卡/窗口中的SignalR客戶端的連接ID傳遞給了控制器,並且在控制器操作中,您使用了以下代碼段.Client(queryParams.ConnectionId).SendAsync()將消息發送到特定客戶端,因此其他瀏覽器窗口或標簽不會收到該消息。

如果您想向具有多個連接的客戶端發送消息,則需要將SignalR用戶映射到連接ID並保留有關用戶到連接ID映射的信息,那么您可以獲取客戶端的所有連接ID並發送消息到具有多個connectionId的客戶端,如下所示。

//code logic here 
//to get all connectinIds of a client/user
//from user-to-connectionIds mapping table

await _paymentDraftHub.Clients.Clients(connectionIds_here).SendAsync("method_here",args_here); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM