먼저, 프로젝트 아래에 새로운 Hubs 폴더를 만들었습니다
또한, 아래 그림과 같이 폴더 아래에 새 PositionVehicle 파일을 생성하세요:
프로젝트를 다시 빌드한 후, 뷰 페이지에서 다음 두 개의 js 파일을 참조합니다
메모!!!
"/Scripts/jquery.signalR-2.2.2.min.js" 파일은 SignalR 설치 시 추가되며 물리적 디스크에 존재합니다
"/signalr/hubs"는SignalR은 자동으로 생성됩니다, 이 디스크는 물리적 디스크에서 찾을 수 없습니다!
SignalR이 생성한 js 파일을 살펴보겠습니다.
/*! * ASP.NET SignalR 자바스크립트 라이브러리 v2.2.2 * http://signalr.net/
* * 저작권 (c) .NET 재단. 판권 소유. * Apache 라이선스 버전 2.0에 따라 제공됩니다. 라이선스 정보는 프로젝트 루트의 License.txt을 참조하세요.
* */
<참조 경로="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" /> <참조 경로="jquery.signalR.js" /> (함수 ($, window, undeed) { <param name="$" type="jQuery" /> "strict를 사용한다";
if (typeof ($.signalR) !== "function") { 새로운 Error("SignalR: SignalR가 로드되지 않았습니다. ~/signalr/js.") 앞에 jquery.signalR-x.js 참조가 반드시 포함되도록 해 주세요"); }
var signalR = $.signalR;
function makeProxyCallback(hub, callback) { 반환 함수 () { 클라이언트 허브 메서드를 호출하세요 callback.apply(hub, $.makeArray(arguments)); }; }
function registerHubProxies(instance, shouldSubscribe) { var key, hub, memberKey, memberValue, subscriptionMethod;
(예를 들어 키) { if (instance.hasOwnProperty(key)) { 허브 = 인스턴스[key];
만약 (!( hub.hubName)) { 클라이언트 허브가 아닙니다 계속하세요; }
만약 (구독해야 한다면) { 허브 이벤트에 구독하고 싶습니다 subscriptionMethod = hub.on; } 그렇지 않으면 { 허브 이벤트에서 구독을 취소하고 싶습니다 subscriptionMethod = hub.off; }
허브의 모든 멤버를 루프해서 클라이언트 허브 기능을 찾아 구독/해제 기능을 하세요 for (memberKey in hub.client) { if (hub.client.hasOwnProperty(memberKey)) { memberValue = hub.client[memberKey];
만약 (!$.isFunction(memberValue)) { 클라이언트 허브 기능이 아닙니다 계속하세요; }
subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue)); } } } } }
$.hubConnection.prototype.createHubProxies = function () { var proxies = {}; this.starting(function () { 허브 프록시를 구독 상태로 등록하세요 (인스턴스, 구독 필요) registerHubProxies(proxy, true);
this._registerSubscribedHubs(); }).disconnected(function () { "연결이 끊기" 때 모든 허브 프록시를 구독 해제하세요. 이는 기능 콜백이 다시 추가되지 않도록 하기 위함입니다. (인스턴스, 구독 필요) registerHubProxies(프록시, false); });
프록시['positionVehicle'] = this.createHubProxy('positionVehicle'); proxies['positionVehicle'].client = { }; proxies['positionVehicle'].server = { 안녕하세요: 함수 (이름) { return proxies['positionVehicle'].invoke.apply(proxies['positionVehicle'], $.merge(["Hello"], $.makeArray(arguments)))); } };
대리 반환; };
signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false }); $.extend(signalR, signalR.hub.createHubProxies());
}(window.jQuery, window));
그럼 테스트해보자. 코드는 다음과 같다:
검사 결과는 다음과 같습니다:
처음 받은 두 메시지는 저희가 직접 보낸 것이었고, 저희도 받았으며, 세 번째 메시지는 제가 다른 브라우저를 열어 보낸 것이었고, 저희도 받았습니다.
메시지를 받았을 때는 웹소켓이 아니라 HTTP 폴링이었는데, 우리 js가 오류를 보고했기 때문입니다
js 오류가 왜 보고되었는지에 대해서는 다음에 자세히 다루겠습니다.
|