2011-12-08 2 views
7

나는 SingalR (https://github.com/SignalR/SignalR)을 공부하고 있습니다.SignalR (허브)은 신호 생성기를 제외한 메시지를 보낼 수 있습니까?

이벤트를 만드는 사람을 제외한 모든 연결 에 정말로 메시지를 보내려합니다. 채팅 응용, 예를 들어

,

는 3 클라이언트 (A, B, C)가있다.

클라이언트 "Hello"및 clikc submit 메시지를 입력하십시오.

Clients.addMessage (data); 모든 Cleint에 "안녕하세요"를 보내 (포함 cleint의 A) 내가

가 어떻게 그것을 달성 할 수

에만 클라이언트 B와 C를 "안녕하세요"를 보낼

은?

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

@dfowler litte를 도울 수 있습니까? ^^? – ShootingStar

답변

12

오늘 서버에서 메시지를 필터링하는 방법은 없지만 클라이언트 측에서 발신자에게 메시지를 차단할 수 있습니다. signalr에있는 샘플 중 일부를 보면 메소드 (일반적으로 조인이라고 함)에서 각 클라이언트에 생성 된 ID를 클라이언트에 할당한다는 것을 알 수 있습니다. 허브에서 메소드를 호출 할 때마다 호출 클라이언트의 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); 
}; 

희망.

+0

나는 이것이 나에게 정말로 도움이된다고 생각한다. 답변 주셔서 감사합니다. 또한 훌륭한 프레임 워크를 가져 주셔서 감사합니다. 축복합니다. – ShootingStar

+0

답장을 보낸 후 id 속성이 변경 되었습니까? 클라이언트 쪽에서 ID를 얻지 못하고 정의되지 않은 값을 반환합니다. –

5

HubClients.Others 속성을 사용하면 이제 (v1.0.0) 가능합니다.

예 : Clients.Others.addMessage(data)은 호출자를 제외한 모든 클라이언트에서 addMessage 메서드를 호출합니다.

관련 문제