首页 文章

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

提问于
浏览
1

在这里,我得到了信号器的位代码并包括在内 .

客户端代码

$(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()函数,但想想当我向特定客户端发送数据或消息时,如果那是客户端不再连接那么会发生什么?

在信号器中是否有任何规定,我们可以在将数据传送到特定客户端之前确定客户端已连接 .

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

1 回答

  • 1

    我对此有一个建议 . 在 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();
    }
    

    并且有 OnDisconnect 方法 .

    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);
    }
    

    你可以参考这个link

相关问题