0

文字列をリアルタイムでクライアントに送信する必要がありますが、私のコードはスリープ状態でしか機能しません。スリープ パラメータを減らすと、一部の呼び出しが失われます。クライアントからサーバーへの呼び出しが必要ないため、ハブ クラスは空です。これが私のaspxファイルです:クライアント(aspx):

var myhub = $.connection.chatHub;
myhub.client.broadcastMessage = function (message) {
    $('#container').append(message);
};
$.connection.hub.start();

サーバー (C#):

protected void Button1_Click(object sender, EventArgs e)
{            
    Thread t = new Thread(novaThread);
    t.Start();
}

static void novaThread() {
    var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
    for (int i = 0; i < 20; i++)
    {
        hubContext.Clients.All.broadcastMessage("Server datetime: " + DateTime.Now.ToString());
        Thread.Sleep(1000);
    }   
}
4

1 に答える 1

1

サーバー上でクライアント メソッドを呼び出す場合は、引き続きハブが必要です。ハブは、その接続を永続させるものです。名前を少し変更する必要があるようです。

var myhub = $.connection.chatHub;
myhub.client.broadcastMessage = function (message) {
        $('#container').append(message);
};

$.connection.hub.start();

サーバーでChatHubを呼び出している場合、testHubはまったく意味がありません。その結果、javascript を更新して、あなたが行っていた testHub ではなく、chatHub を呼び出すようにしました。クライアントでchatHubのインスタンスを作成していることを確認するだけで、 Thread.Sleep(1000) を取り除くことができるはずです(実際には必要ないと仮定して)。クライアントに完全にブロードキャストします。

編集:

あなたのコメントに照らしてみると、実際にスピンアップしているスレッドが多すぎる可能性があります。実行しているスレッドの数によっては、ドメインごとのクライアント側の同時接続数を増やす必要がある場合があります。デフォルトは 2 です。http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspxを参照してください。

于 2013-11-07T15:02:39.590 に答える