SignalR如何在1个集线器中调用2个不同的方法

本文关键字:2个 方法 调用 1个 集线器 SignalR | 更新日期: 2023-09-27 18:25:37

所以我在一个集线器中有两个方法:

public class ChatHub : Hub
{
    public void SendMessage(string name, string message)
    {
        Clients.All.AddMessage(name, message);
    }
    public void SendAnnounce(string name)
    {
        Clients.Others.AddMessage(name);
    }
}

如何在客户端javascript的一个hub中正确地将两个方法一起使用?

我有这个javascript,

对于SendMessage(字符串名称,字符串消息)集线器方法:

            var message = $("#txtMessage").val();
            var userid = $("#lblUsername").html();
            chat.client.addMessage = function (frm, msg) {
                $messages.append("[" + frm + "] " + msg);
            }

调用:

            chat.server.sendMessage(userid, input);

对于SendAnnounce(字符串名称)集线器方法:

            chat.client.addMessage = function (frm) {
                $announcement.append("<div>test</div>");
            }

调用:

            var userid = $("#txtUsername").val();
            chat.server.announcement(userid);

但它不起作用(服务器只是在我的案例公告一中使用最后一个方法)
只有当我制作两个集线器,并将每个方法放在不同的集线器中,然后为每个集线器创建不同的变量时,它才能工作,如下所示:

                //Create Hub on Air
            var chat = $.connection.chatHub;
            var chat2 = $.connection.announcementHub;

然后使用带有"chat"变量的1个方法和带有"chat2"变量的第二个方法。。然后它就起作用了。像这样:

            chat.client.addMessage = function (frm, msg) {
                $messages.append("[" + frm + "] " + msg);
            }
            chat2.client.addMessage = function (frm) {
                $announcement.append("<div> test</div>");
                });
            }

我有什么不明白的?

SignalR如何在1个集线器中调用2个不同的方法

在JavaScript中,方法不能真正重载。您要做的是首先将addMessage声明为具有两个参数的函数,然后用具有一个参数的功能覆盖它。所以最后一个正在使用

使用不同名称的方法,例如addMessageaddAnnouncement,或者使用单个方法并检查是否定义了第二个参数。如果不是,那就是一个公告。

我真的做到了!在一个实例中调用两个方法。我不明白的是,你为什么要创建两个实时连接?你只需要一个。