2017-11-02 4 views
0

모든 클라이언트에게 메시지를 브로드 캐스트하려고하면 클라이언트의 자바 스크립트 코드를 서버에서 트리거하여 작업을 완료 할 수 있습니다.SignalR - 서버로 통보를 푸시

하지만 이번에는 모든 서버에서 메소드를 트리거하는 것이 목표입니다. 예를 들어 한 서버에서 사용자 역할이 변경되면 다른 서버에이 작업에 대해 경고하고 다른 서버가 특정 사용자에 대해 업데이트 된 사용자 역할 목록을 검색하도록하려고합니다.

SignalR로이 작업을 수행 할 수 있습니까? 서버가 클라이언트 (브라우저)처럼 작동 할 수 있습니까?

+0

서버가 백플레인을 사용하고 있습니까? – gobes

+0

예 @gobes, 그들은 Redis 서버를 백플레인으로 사용하고 있습니다. –

+0

기본적으로 그런 일은 할 수 없다고 생각합니다.하지만 redis를 사용할 때 일부 채널을 구독 한 다음 새로 고침 메시지를 게시하여 구독자에게 새로 고침 메커니즘을 트리거 할 수 있습니다. – gobes

답변

1

네, 그렇게 할 수 있습니다.

의는 다음과 같은 허브 있다고 가정 해 봅시다 : 모든 청취 서버에서

public class TheHub : Hub 
{ 
    public void RoleChanged(int userId) 
    { 
     Clients.All.roleChanged(userId); 
    } 
} 

을, 당신은해야 할 것 :

var _connection = new HubConnection("http://localhost:1234/signalr"); 
var _theHub = _connection.CreateHubProxy("TheHub"); 

_myHub.On<int>("RoleChanged", userId => 
    { 
     System.Diagnostics.Debug.WriteLine("Changed user's Id: " + userId); 
    }); 

_connection.Start().Wait(); 

가 RoleChanged 이벤트를 호출하려면 수행

_myHub.Invoke("RoleChanged").Wait(); 
+0

ASP.NET 서버 측 코드에서 두 번째 코드 세그먼트는 어디에 배치해야합니까? 또한,'_connection.Start(). Wait();'는 영속적입니까, 아니면 한번만 실행됩니까? –

+0

두 번째 코드는 Global.asax.cs 파일의 Application_Start 메서드에 넣을 수 있습니다. 한 번만 호출해야합니다. – chaosifier