웹어플리케이션에서 실시간 통신을 하기 위해서는 웹소켓 그리고 서버에서 보내는 이벤트들과 같은 html 5를 사용할 수 있습니다. 반면에 이러한 기술들은 요즘 웹어플리케이션에서 사용될 수 있습니다. 하지만 html 5 가 모든 브라우저에서 사용할 수 없습니다. 덧붙어서 이는 복잡한 시나리오로 다소의 어렵게 구현해야 합니다. asp.net SignalR 은 라이브러리이며, 이는 웹어플리케이션에서 쉽게 실시간 통신이 가능하도록 할 수 있습니다. 이번 내용은 SignalR 를 기반으로 asp.net 웹폼 어플리케이션을 배우도록 하겠습니다.
ASP.NET SignalR 은 실시간 통신을 구현하기 위한 하나의 라이브러리 입니다. 데이터가 서버에서 생성 또는 일부 이벤트가 서버에서 발생되는 즉시, 같은 응용 프로그램에서 클라이언트는 최신 데이터로 업데이트를 합니다.
기존방식의 구현은 ajax 기술을 토대로 주기적으로 서버에 호출하여 가져와서 보여줍니다. 하지만, 이런 접근 방법은 문제가 있습니다. 다른 방법은 실시간 통신을 위해, HTML5 Web Sockets or Server Sent Events (SSE) 을 사용하는 방법입니다. 그러나 이러한 기술은 html 5 를 지원하는 브라우저에서나 가능합니다. 대상 브라우저가 지원하는 경우 SignalR는 HTML5의 Websockets를 사용, 그렇지 않으면 다른 기술로 구현해야겠지요. 최상의 방법은 상세히 내부 구현을 알 필요없이 개발자분이 구현하는게 좋겠지요. 덧붙여서 SignalR 은 연결 관리, 그룹, 권한부여을 쉽게 생성해 줍니다. 이는 통신 기술의 내부에 대해 너무 많이 걱정없이 웹 응용 프로그램에서 SignalR에 의해 높은 수준의 API로 작업 할 수 있습니다.
SignalR 은 다양한 용도로 아래와 같이 사용이 가능합니다.
1. 두 명이상의 사용자가 실시간으로 채팅이 가능한 채팅프로그램을 구현할 수 있다.
2. 특정 클라이언트 또는 모두에서 알람을 알려줄 수 있다.
3. 실시간 게임 어플리케이션
4. 소션 네트워크 웹사이트
5. 관리자 또는 맴버들이 또 다른 관리자 및 맴버들과 통신 할 수 있는 의견 게시판들을 구현가능하다.
아래 화면은 asp.net SignalR 을 실행 할 경우 화면 내용입니다.
이를 구현하기 위해, 아래의 사이트에서 설치 하길 바랍니다.
설치 후 , vs 에 템플릿을 제공해 줍니다.
SignalR Hub Class 를 선택하여 아래와 같이 구현합니다.
여기서 Microsoft.AspNet.SignalR 의 namespace 를 사용합니다. 이러한 메소드는 클라이언트 측 스크립트에서 호출 할 수 있습니다. SignalR hub는 응용 프로그램에 대한 높은 수준의 RPC 프레임 워크를 제공합니다. 또한 스크립트 폴더 아래 특정 스크립트 파일을 찾을 수 있습니다.
- namespace SignalRDemo
- {
- public class MyHub1 : Hub
- { public void Hello()
- {
- Clients.All.hello();
- }
- }
- }
아래 코드를 hub class 에 추가합니다.
- public void SendNotifications(string message)
- {
- Clients.All.receiveNotification(message);
- }
Global.asax 에 아래와 같은 코드를 입력합니다.
- protected void Application_Start(object sender, EventArgs e)
- {
- RouteTable.Routes.MapHubs();
- }
이제 웹페이지를 하나 만들어서 자바스크립트를 구현합니다. 아래 코드는 입력한 값을 전송하는 방법입니다.
전송하기 위해 proxy.server.sendNotifications 메소드를 사용합니다.
이는 관리자 페이지 하나를 만들어 특별히 통보하는용도로 구현된 것입니다. 전송하면 이를 통보받은 페이지를 만들어보죠.
- <!DOCTYPE html>
- <html>
- <head>
- <title>Admin Form Sending Notifications</title>
- <script src="/Scripts/jquery-1.8.2.min.js" ></script>
- <script src="/Scripts/jquery.signalR-1.0.0.js"></script>
- <script src="/signalr/hubs"></script>
- <script type="text/xxjavascript">
- $(function () {
- var proxy = $.connection.notificationHub;
- $("#button1").click(function () {
- proxy.server.sendNotifications($("#text1").val());
- });
- $.connection.hub.start();
- });
- </script>
-
- </head>
- <body>
- <input id="text1" type="text" /><input id="button1" type="button" value="Send" />
- </body>
- </html>
아래는 관리자 분이 전송한 데이터를 실시간 통신으로 받는 페이지 입니다.
이를 받기 위해 proxy.client.receiveNotification 함수를 사용합니다.
- <!DOCTYPE html>
- <html>
- <head>
- <title>Client Form Receiving Notifications</title>
- <script src="/Scripts/jquery-1.8.2.min.js" ></script>
- <script src="/Scripts/jquery.signalR-1.0.0.js"></script>
- <script src="/signalr/hubs"></script>
- <script type="text/xxjavascript">
- $(function () {
- var proxy = $.connection.notificationHub;
- proxy.client.receiveNotification = function (message) {
- $("#container").html(message);
- $("#container").slideDown(2000);
- setTimeout('$("#container").slideUp(2000);', 5000);
- };
- $.connection.hub.start();
- });
- </script>
- </head>
- <body>
- <div class="notificationBalloon" id="container">
- </div>
- </body>
- </html>
관리자 페이지를 열고 글자를 기재 후 작성버튼을 선택하면, 다수의 사용자 페이지들에 해당 글이 전송되어 리스트에 보여줍니다.
감사합니다.
첫댓글 와우 아주 좋네요 활용도가 높을것 같습니다
^^
수동으로 추가하는 방법보다는 누겟에서 signalr core 패키지를 설치하는 것이 더 좋아용
빈 웹프로젝트 추가 후 signalr sample 패키지를 추가하시면 더 좋은 셈플을 볼 수 있습니당
좋은 정보 감사욤^^*
와... 이런 글 보면 왠지 모르게 자꾸 처지는 느낌이 들어요 ㅠㅠ;...
잘보고 갑니다. 감사합니다.
:)
오...
:)
오 웹쳇팅이 쉽겠네요. 좋은 정보 감사해요. 재운님은 아는 것도 많으셔 ~ ^^
자주 오세욤 ㅎㅎ
실시간 채팅 때문에 node.js를 보긴 봤는데, ASP.NET MVC로 구현하면 더 깔끔할듯 합니다.
좋은 정보 감사드립니다.
조언 감사합니당 :)
좋은 정보 감사합니다~~~~~~~~~~~!!!
네 ㅎ