我对使用 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 时需要以不同的方式编写代码?谢谢