我创建了一个项目x,但看不到错误在哪里。一切正常,但是私人消息不起作用。下面的链接是我的示例项目。在我的真实项目中,客户端的上下文中有一个名为connectionToken的功能。我如何获得connectionToken值或为什么在其中?
**我在真实项目示例项目链接中使用Redis背板:https : //github.com/fdevGit/SignalRExample
根据您提供的代码,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, "&").replace(/</g, "<").replace(/>/g, ">");
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, "&").replace(/</g, "<").replace(/>/g, ">");
var encodedMsg = user + " says " + msg + " by " + targetConnectionId;
var li = document.createElement("li");
li.textContent = encodedMsg;
document.getElementById("messagesList").appendChild(li);
});
测试屏幕截图
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句