【问题标题】:Send a message to only one user with signalR使用 signalR 仅向一个用户发送消息
【发布时间】:2020-05-07 09:21:25
【问题描述】:

我正在编写一个聊天应用程序。我使用Angular 6.Net Core 3.1.

看了很多文档还是不明白哪里出错了。

My Hub Class

public class ChatHub : Hub
{ 
    private static List<ConnectedUser> _connectedUsers = new List<ConnectedUser>();

    public override Task OnConnectedAsync()
    {
        var username = Context.GetHttpContext().Request.Query["username"];

        var status = _connectedUsers.FirstOrDefault(x => x.Username == username);

        if (status == null)
        {
            _connectedUsers.Add(new ConnectedUser
            {
                ConnId = Context.ConnectionId,
                Username = username
            });

        }

        return base.OnConnectedAsync();
    } 
    ...

我有一个列表,其中保存了我的Hub Class 中连接的用户的connection id 信息。当用户连接时,我会添加到此列表中。

我在下面的Private Chat Function 操作。

public void PrivateChat(string toUser,string fromUser,string message)
{
    _connectedUsers.ForEach(val =>
    {
        if(val.Username == toUser)
           Clients.User(val.ConnId).SendAsync("receiveMessage", message,fromUser);
    });
}

但是,我无法返回到我想要的用户。

你在Angular这样使用它

this._hubConnection.on('receiveMessage', (message,fromUser) => {
     console.log(message , "+" , fromUser);
  }
);

【问题讨论】:

    标签: asp.net-core signalr-hub


    【解决方案1】:

    你应该使用

     Clients.Clients(val.ConnId).SendAsync("receiveMessage", message,fromUser);
    

    【讨论】:

      猜你喜欢
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 2017-12-28
      • 2015-04-27
      相关资源
      最近更新 更多