2016-12-08 13 views
0

저는 SignalR과 Azure Service Bus 스케일 아웃 백플레인을 사용하도록 구성된 Azure Web App로 실행되는 웹 사이트를 운영하고 있습니다. 모두 잘 작동하며 클라이언트는/signalr URL을 통해 연결하고 서버에서 연결된 클라이언트로 데이터를 보낼 수 있습니다.SignalR 웹 소켓을 통해 콘솔 프로그램의 데이터를 어떻게 푸시합니까?

또한 주기적으로 새 데이터를 실행하고 출력하는 여러 콘솔 앱이 있습니다. 새로운 데이터를 웹에 연결된 클라이언트에게 전달하고 싶습니다.

SignalR을 사용하여 웹 이외의 응용 프로그램과 어떻게 연결할 수 있습니까? 내가보기에 모든 예제는 스케일 아웃 클러스터에있는 모든 서버가 웹에 접하는 것으로 가정합니다. 외부 프로세스가 SignalR 클러스터에 참여하고 SignalR websocket 연결을 통해 웹 연결 클라이언트에 데이터를 전송할 수 있도록 웹 앱을 만들 필요없이 몇 가지 특별한 설정이 있습니까?

+1

중복 될 수 있음 [SignalR 콘솔 앱 예] (http://stackoverflow.com/questions/11140164/signalr-console-app-example) – bartbje

+0

맞는지 확실하지 않습니다.링크 된 예제는 클라이언트가 콘솔 앱에 직접 연결하고 콘솔 앱이 포트 8088에서 SignalR 엔드 포인트를 제공하고 있음을 보여줍니다. 제 경우에는 클라이언트가 엔드 포인트를 관리하는 웹 서버에 연결되고 클라이언트와 콘솔 앱은 웹 서버가 픽업하여 연결된 클라이언트에게 보낼 필요가있는 SignalR 스케일 아웃 백플레인을 통해 데이터를 전송합니다. –

답변

1

두 가지 옵션이 있습니다.

첫 번째 옵션

당신은 signalR 백플레인에 "콘솔 응용 프로그램"을 연결할 수 있으며, 이러한 애플리케이션은

var hub = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
hub.Clients.All.doSomething("blah-blah"); 

당신은 어떤 포트를 사용할 수 있습니다처럼 뭔가 클라이언트의 메소드를 호출 할 수 있습니다 signalR config의 경우 동일한 백플레인 구성 및 동일한 허브의 경우. 자기 호스팅을 위해 Owin을 사용할 수 있습니다. 아무도이 콘솔 앱에 연결할 수 없습니다.

단점 :

1) 콘솔 응용 프로그램은 SignalR.SelfHosting과 허브 클래스를 참조 할 필요가있다. 이것은 건축 적 관점에서 좋지 않습니다.

2) 콘솔 앱이 일부 포트를 수신합니다 (신호가 서버이기 때문에). 이론적으로 누군가가이 허브에 연결하여 뭔가를 할 수 있습니다. 이것은 보안 관점에서 볼 때 아키텍처의 관점에서 좋지 않습니다.

두 번째 옵션

당신은 "PushSomeDataToClients"와 같은 허브 메소드를 구현하고 @bartbje 코멘트에서 언급 한 바와 같이 SignalR 클라이언트를 사용하여 콘솔 응용 프로그램에서 호출 할 수 있습니다.

장점 : 첫 번째 옵션의 단점이 없습니다.

단점 : 시스템 외부의 누군가가이 메소드를 호출하지 못하게하려면 보안 관련 항목을 구현해야합니다. SignalR은 이것을하기위한 많은 것들을 가지고 있습니다, 그래서 그냥 구글. 예를 들어, 시스템 간 통신을 위해 별도의 허브를 만들 수 있습니다.

세 번째 옵션 다음 또 다른 방법 SignalR와 웹 서버 애플 리케이션

상호 작용. 아마 당신은 이미 rabbitMq 나 어떤 종류의 서비스 버스 같은 것을 사용하고있을 것입니다. 또한 웹 서버 앱에서 별도의 ApiController를 사용하여 구현할 수도 있습니다. 그러나 그것은 두 번째 옵션에 더 가깝게 보인다.

나는 건축상의 관점에서 볼 때 제 3의 옵션을 선택했을 것입니다.

+0

세 번째 옵션이 좋은 아이디어입니다. –