想要只向连接的客户端SignalR发送消息



这里我得到了signaler的位代码,并包含在内。

客户端代码

$(function () {
    // Proxy created on the fly
    var chat = $.connection.chat;
    // Declare a function on the chat hub so the server can invoke it
    chat.addMessage = function (message) {
        $('#messages').append('<li>' + message + '');
    };
    $("#broadcast").click(function () {
        // Call the chat method on the server
        chat.send($('#msg').val());
    });
    // Start the connection
    $.connection.hub.start();
});

服务器代码

public class Chat : Hub
{
    public void Send(string message)
    {
        // Call the addMessage method on all clients
        Clients.addMessage(message);
    }
}

只需看到这一行,Clients.addMessage(message); addMessage()将在客户端调用addMessage(?

Signaler中是否有任何规定,比如在将数据传递到特定客户端之前,我们是否可以确定客户端已连接。

在向客户端发送数据之前,我想检测特定的客户端是否已连接。如果客户端没有连接,那么我会将该特定用户的数据存储在数据库中。请帮助我提供如何检测特定客户端是否连接的示例代码?感谢

我对此有一个建议。在Chat类中声明一个static List。对OnConnect事件使用以下代码。

public override Task OnConnected() {
    string connectionId = Context.ConnectionId;
    // Store this connectionId in list -- This will be helpful for tracking list of connected clients.
    return base.OnConnected();
}

并采用CCD_ 5方法。

public override Task OnDisconnected() {
        string connectionId = Context.ConnectionId;
        // Remove this connectionId from list
        // and save the message for disconnected clients.
        // Maintain list of disconnected clients in a list, say ABC
        return base.OnDisconnected();
}

send上,方法仅对连接的客户端执行。

public void Send(string message){
        // Call the addMessage method on all clients
        Clients.AllExcept(ABC.ToArray()).addMessage(message);
}

您可以参考此链接

最新更新