2012-08-03 12 views
4

내 웹 응용 프로그램에는 SignalR hub에 빌드 된 채팅 응용 프로그램 모듈이 있습니다.별도의 appPool에서 SignalR 호스팅

앱에 1000+ 명의 동시 사용자가 있습니다. 채팅 모듈을 별도의 응용 프로그램 풀에 호스트하여 내 응용 프로그램과 분리하여 SignalR이 주요 응용 프로그램의 병목 현상을 일으키지 않도록하고 싶습니다.

나는 그것에 대해 어떻게 해야할지 잘 모르겠다. 간단하게 채팅 시스템을 만들었습니다 (Google Talk과 같이). 메인 클래스 웹 프로젝트에 Hub 클래스를 사용하고 클라이언트 측 코드는 사이트 마스터에 있습니다. 응용 프로그램 전반에 걸쳐 공통적으로 사용됩니다.

또한 Hub 클래스 외부에서 Hub 메서드를 호출 할 수 있기를 원합니다. 예를 들어 관리자가 관리자 패널에서 특정 작업을 사용자에게 할당 할 수 있습니다. 따라서 서비스 작업 (작업 할당)을 성공적으로 완료 한 후 Controller 메서드에서 SignalR 메시지를 특정 사용자에게 보내려고합니다. 두 목표를 모두 달성하려면 허브 또는 지속성 연결을 사용해야합니까? 호스트 다른 포트의 SignalR? 이것에 대한 몇 가지 지침을 주시면 감사하겠습니다. 감사!

+0

"주 응용 프로그램 병목 현상"이라고 생각되는 이유는 무엇입니까? 한 서버에 불필요한 통신 오버 헤드를 추가하는 것보다 서버에서 응용 프로그램을 확장하는 방법을 조사하는 것이 좋습니다. –

답변

3

아니야, 필자는 반드시 이 있어야한다고 생각하지만 분리하려는 욕구를 이해할 수 있습니다. 이를 위해서는 MVC 애플리케이션이 허브 메소드를 호출해야합니다. 마치 SignalR 클라이언트 자체처럼 말입니다. 동일한 허브에 별도의 메소드를 배치하거나 이러한 종류의 어플리케이션 간 통신을 위해 단독으로 존재하는 보조 허브를 추가하여이 작업을 수행 할 수 있습니다.

다르게 보안 할 수 있으므로 두 번째 허브를 사용하는 후속 접근 방법을 사용합니다. 이 길로 가면 기본 허브에 HubContext을 받고 원하는 신호를 보내고 자하는 모든 전화를 걸 수 있습니다. 그러면 다음과 같이 보일 수 있습니다.

public MyInterAppCommunicationHub : Hub 
{ 
    public void SendSystemAlert(string message) 
    { 
     HubContext myPrimaryHubContext = GlobalHost.ConnectionManager.GetHubContext<MyPrimaryHub>(); 

     myPrimaryHubContext.Clients.systemAlert(message); 
    } 
}