1

我对使用 Signalr Hub 方法的 Signalr 有点熟悉。当我们使用 Signalr Hub 创建通信程序时,我们这样编写代码

public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(name, message);
        }
    }

和客户端,我们使用这种方式连接到集线器,比如 javascript

<script type="text/javascript">
        $(function () {
            // Declare a proxy to reference the hub. 
            var chat = $.connection.chatHub;
            // Start the connection.
            $.connection.hub.start().done(function () {
                $('#sendmessage').click(function () {
                    // Call the Send method on the hub. 
                    chat.server.send($('#displayname').val(), $('#message').val());
                    // Clear text box and reset focus for next comment. 
                    $('#message').val('').focus();
                });
            });
        });
    </script>

当我们使用 PersistentConnection 编写通信程序时,代码看起来像

public class MyConnection : PersistentConnection
{
    protected override Task OnConnected(IRequest request, string connectionId)
    {
        string msg = string.Format(
            "A new user {0} has just joined. (ID: {1})",
            request.QueryString["name"], connectionId);
        return Connection.Broadcast(msg);
    }
    protected override Task OnReceived(IRequest request, string connectionId, string data)
    {
        // Broadcast data to all clients
        string msg = string.Format(
            "{0}: {1}", request.QueryString["name"], data);
        return Connection.Broadcast(msg);
    }
}

用于连接的客户端

$(function () {
            $("#join").click(function () {
                var connection = $.connection("/echo", "name=" + $("#name").val(), true);;

                connection.received(function (data) {
                    addMsg(data);
                });
                connection.error(function (err) {
                    addMsg("Error: " + err);
                });

                addMsg("Connecting...");
                connection.start(function () {
                    addMsg("Connected.");
                    $("#send").click(function () {
                        connection.send($("#msg").val());
                    });
                });
            });
        });

现在,当任何人看到使用 HUB 或 PersistentConnection 开发任何通信应用程序的代码时,他们肯定会注意到有不同的方法可以通过 javascript 从客户端连接到服务器端的集线器或 PersistentConnection。

当我们从客户端连接到集线器时,我们像这样编写 javscript

// Declare a proxy to reference the hub. 
var chat = $.connection.chatHub;

在这里,我们在集线器的情况下以这种方式声明代理。连接,然后是我给的集线器名称。

但是在 PersistentConnection 的情况下,我们这样声明代理

var connection = $.connection("/echo", "name=" + $("#name").val(), true);

我的问题是为什么我们不必像这样给出扩展 PersistentConnection 类的类名,public class MyConnection : PersistentConnection 而我们的代码应该看起来像

var connection = $.connection.MyConnection ("/echo", "name=" + $("#name").val(), true);

还告诉我什么是回声?还指导我为什么需要将用户作为查询字符串传递?

请指导我为什么在使用 hub 或 PersistentConnection 时需要以不同的方式编写代码?谢谢

4

0 回答 0