私は 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 に接続するための異なるアプローチがあることに間違いなく気づきます。
クライアント側からハブに接続すると、次のように javascript を記述します
// 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);
また、エコーとは何か教えてください。また、ユーザーをクエリ文字列として渡す必要があるのはなぜですか?
ハブまたは PersistentConnection を使用する場合、コードを別の方法で記述する必要がある理由を教えてください。ありがとう