使用 signalR 仅向一个用户发送消息
Send a message to only one user with signalR
我正在编写一个聊天应用程序。我使用 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);
});
}
但是,我不能return到我想要的用户。
你在Angular
中这样使用
this._hubConnection.on('receiveMessage', (message,fromUser) => {
console.log(message , "+" , fromUser);
}
);
你应该使用
Clients.Clients(val.ConnId).SendAsync("receiveMessage", message,fromUser);
我正在编写一个聊天应用程序。我使用 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);
});
}
但是,我不能return到我想要的用户。
你在Angular
中这样使用
this._hubConnection.on('receiveMessage', (message,fromUser) => {
console.log(message , "+" , fromUser);
}
);
你应该使用
Clients.Clients(val.ConnId).SendAsync("receiveMessage", message,fromUser);