7

SingalR( https://github.com/SignalR/SignalR )を勉強しています。

イベントを作る人以外の関係者全員にメッセージを送りたいです。

例えば、

Chatting アプリケーションには、3 つのクライアント (A、B、C) があります。

クライアント A は、「Hello」というメッセージを入力し、クリックしてサブミットします。

Clients.addMessage(データ); すべての Cleint に「Hello」を送信 (Cleint A を含む)

クライアントBとCだけに「Hello」を送りたい。

どうすれば達成できますか?

// I think this can get all Clients, right?
var clients = Hub.GetClients<Chat>();
4

2 に答える 2

12

現在、サーバー上でメッセージをフィルタリングする方法はありませんが、クライアント側から発信者へのメッセージをブロックすることはできます。Signalr のサンプルのいくつかを見ると、生成された ID をメソッド (通常は join と呼ばれます) でクライアントに割り当てることがわかります。ハブからメソッドを呼び出すときは常に、呼び出し元のクライアントの ID を渡し、クライアント側でクライアントの ID が呼び出し元と同じでないことを確認します。例えば

public class Chat : Hub { 
    public void Join() {
        // Assign the caller and id
        Caller.id = Guid.NewGuid().ToString();
    }

    public void DoSomething() {
        // Pass the caller's id back to the client along with any extra data
        Clients.doIt(Caller.id, "value");
    }
}

クライアント側

var chat = $.connection.chat;
chat.doIt = function(id, value) {
   if(chat.id === id) {
      // The id is the same so do nothing
      return;
   }

   // Otherwise do it!
   alert(value);
};

それが役立つことを願っています。

于 2011-12-08T10:55:44.957 に答える
5

Clients.Othersでプロパティを使用することで(v1.0.0)可能になりましたHub

例:呼び出し元を除くすべてのクライアントClients.Others.addMessage(data)でメソッドを呼び出します。addMessage

于 2013-03-01T15:03:44.173 に答える