2014-01-06 2 views
0

특정 서버 시간에 서버에서 모든 클라이언트로 SignalR을 사용하여 메시지를 브로드 캐스팅하려고합니다. 이 브로드 캐스트 메시지는 모든 클라이언트가 서버 메서드를 계속 수신하고 서버에서 예약 된 시간에 도달하면 자동으로 수행되어야하며 서버는 메시지를 브로드 캐스트해야합니다.SignalR을 사용하여 예약 된 시간에 클라이언트에게 메시지 브로드 캐스팅

하지만이 방법은 없습니다. 클라이언트에서 호출하여 모든 클라이언트에 브로드 캐스트하지만 자동으로 브로드 캐스트하지 않음으로써 성공했습니다.

어떻게 달성 할 수 있습니까?

+0

클라이언트에서 x 초마다 한 번 호출하고 isTimeToBroadCast를 볼 수 있습니까? – Esen

+0

SignalR을 사용하여이 작업을 수행 할 것인지 확실하지 않습니다. 실제로 그것은 SignalR 자체와 직각입니다. 한 간격으로 실행되는 코드를 작성하는 것이 실제로 필요한 작업입니다. 아마도 .NET 라이브러리가있어 코드를 일정에 따라 실행하도록 지정할 수 있습니다 (실제로는 실시간이 아니지만). – davidfowl

답변

0

허브 클래스에 타이머를 추가하고 필요한 간격으로 각 클라이언트에 브로드 캐스트 할 수 있습니다.

public class MyHub : Hub {} 

당신은 당신이 원하는 무엇이든 클라이언트 또는으로이 허브에 연결할 수 있습니다

1

먼저 당신은 허브의 일종이 필요합니다. 그런 다음 허브에 보내는 루프 유형의 루핑 클래스가 필요합니다 (정적 타이머로 허브에서이 작업을 수행 할 수도 있지만 별도의 클래스로 처리 할 것입니다).

public class Looper 
{ 
    public Timer Interval 

    public Looper(TimeSpan interval) 
    { 
     Interval = new Timer(Loop, null, TimeSpan.Zero, interval); 
    } 

    private static void Loop(object state) 
    { 
     GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients.All.executeYourMethod(); 
    } 
} 

이제 우리는 어딘가에이 클래스의 인스턴스를 필요, 우리는 할 것이다 그 정적 우리의 허브 내부 :이 도움이

public class MyHub : Hub 
{ 
    public static Looper MyInterval = new Looper(TimeSpan.FromSeconds(1)); // Send every 1 second 
} 

희망!

관련 문제