如何使用aspnet核心SignalR向用户发送私人消息?

时间:2020-08-13 06:21:32

标签: signalr signalr-hub signalr.client asp.net-core-signalr signalr-2

我创建了一个项目x,但看不到错误在哪里。一切正常,但是私人消息不起作用。下面的链接是我的示例项目。在我的真实项目中,客户端的上下文中有一个名为connectionToken的功能。如何获取connectionToken值或为什么存在该值?

**我在真实项目中使用Redis背板 项目链接示例:https://github.com/fdevGit/SignalRExample

1 个答案:

答案 0 :(得分:0)

从您提供的代码中,使用Clients.User()而不是Clients.Client()

Clients.User(...)获取用户标识符。您的参数是connectionId,这是一个不同的概念,已与Clients.Client(...)一起使用。

    public async Task SendMessageToUser(string user, string targetConnectionId, string message)
    {
        Console.WriteLine($"{Context.ConnectionId}-{targetConnectionId}-{message}");
        
        //await Clients.User(...)
        await Clients.Client(targetConnectionId).SendAsync("ReceiveMessageToUser", user, targetConnectionId, message);
    }






关于callback method的名称还有其他建议。在SendAsync()中返回不同的方法名称。

   public async Task SendMessageToMe(string user, string message)
    {
        Console.WriteLine($"{Context.ConnectionId}-Caller-{message}");
        await Clients.Caller.SendAsync("ReceiveMessageToMe", user, message);
    }
    public async Task SendMessageToUser(string user, string targetConnectionId, string message)
    {
        Console.WriteLine($"{Context.ConnectionId}-{targetConnectionId}-{message}");
        await Clients.Client(targetConnectionId).SendAsync("ReceiveMessageToUser", user, targetConnectionId, message);
    }

char.js中的更改

connection.on("ReceiveMessageToMe", function (user, message) {
    var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    var encodedMsg = user + " says " + msg;
    var li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("messagesList").appendChild(li);
});

connection.on("ReceiveMessageToUser", function (user, targetConnectionId, message) {
    var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    var encodedMsg = user + " says " + msg + " by " + targetConnectionId;
    var li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("messagesList").appendChild(li);
});

测试屏幕截图

enter image description here

相关问题