Αρχικά, δημιούργησα έναν νέο φάκελο Hubs στο πλαίσιο του έργου
Επίσης, δημιουργήστε ένα νέο αρχείο PositionVehicle κάτω από το φάκελο, όπως φαίνεται στην παρακάτω εικόνα:
Δημιουργήστε ξανά το έργο και, στη συνέχεια, αναφέρουμε τα ακόλουθα δύο αρχεία js στη σελίδα προβολής
Σημείωση!!!
Το αρχείο "/Scripts/jquery.signalR-2.2.2.min.js" προστίθεται στην εγκατάσταση του SignalR και υπάρχει στον φυσικό δίσκο
Το "/signalr/hubs" είναιΤο SignalR δημιουργείται αυτόματα, το οποίο δεν μπορεί να βρεθεί στον φυσικό δίσκο!
Ας ρίξουμε μια ματιά στο αρχείο js που δημιουργήθηκε από το SignalR, ως εξής:
/*! * ASP.NET Βιβλιοθήκη JavaScript SignalR v2.2.2 * http://signalr.net/
* * Πνευματικά δικαιώματα (γ) .NET Foundation. Ολα τα δικαιώματα διατηρούνται. * Άδεια χρήσης με την άδεια Apache, Έκδοση 2.0. Δείτε License.txt στη ρίζα του έργου για πληροφορίες άδειας χρήσης.
* */
<διαδρομή αναφοράς="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" /> <διαδρομή αναφοράς="jquery.signalR.js" /> (συνάρτηση ($, παράθυρο, απροσδιόριστο) { <param name="$" type="jQuery" /> "χρησιμοποιήστε αυστηρό"?
if (typeof ($.signalR) !== "function") { ρίξε νέο Error("SignalR: Το SignalR δεν έχει φορτωθεί. Βεβαιωθείτε ότι jquery.signalR-x.js αναφέρεται πριν από το ~/signalr/js."); }
var signalR = $.signalR;
συνάρτηση makeProxyCallback(hub, callback) { συνάρτηση επιστροφής () { Καλέστε τη μέθοδο του κέντρου πελάτη callback.apply(hub, $.makeArray(arguments)); }; }
συνάρτηση registerHubProxies(instance, shouldSubscribe) { var κλειδί, hub, memberKey, memberValue, subscriptionMethod;
for (κλειδί για παράδειγμα) { if (instance.hasOwnProperty(key)) { hub = παρουσία[κλειδί];
αν (!( hub.hubΌνομα)) { Δεν είναι κέντρο πελάτη να συνεχίσει; }
αν (πρέπειΕγγραφή) { Θέλουμε να εγγραφούμε στις εκδηλώσεις του κόμβου subscriptionMethod = hub.on; } αλλιώς { Θέλουμε να διαγραφούμε από τις εκδηλώσεις του hub subscriptionMethod = hub.off; }
Κάντε βρόχο σε όλα τα μέλη στο hub και βρείτε τις λειτουργίες του client hub για εγγραφή/κατάργηση εγγραφής for (memberKey στο hub.client) { αν (hub.client.hasOwnProperty(memberKey)) { memberValue = hub.client[memberKey];
if (!$.isFunction(memberValue)) { Δεν είναι λειτουργία διανομέα πελάτη να συνεχίσει; }
subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue)); } } } } }
$.hubConnection.prototype.createHubProxies = συνάρτηση () { var πληρεξούσιοι = {}; this.starting(συνάρτηση () { Καταχωρίστε τους διακομιστές μεσολάβησης διανομέα ως εγγεγραμμένους (παράδειγμα, shouldSubscribe) registerHubProxies(διακομιστής μεσολάβησης, αληθές);
this._registerSubscribedHubs(); }).disconnected(συνάρτηση () { Καταργήστε την εγγραφή όλων των διακομιστών μεσολάβησης όταν "αποσυνδεθούμε". Αυτό γίνεται για να διασφαλιστεί ότι δεν θα προσθέσουμε ξανά λειτουργικές επανακλήσεις. (παράδειγμα, shouldSubscribe) registerHubProxies(διακομιστές μεσολάβησης, false); });
proxies['positionVehicle'] = this.createHubProxy('positionVehicle'); proxies['positionVehicle'].client = { }; proxies['positionVehicle'].server = { hello: function (όνομα) { 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));
Στη συνέχεια, ας το δοκιμάσουμε και ο κώδικας είναι ο εξής:
Τα αποτελέσματα των δοκιμών είναι τα εξής:
Τα δύο πρώτα μηνύματα που λάβαμε στάλθηκαν και τα δύο από εμάς, και τα λάβαμε επίσης, και το τρίτο μήνυμα στάλθηκε από εμένα που άνοιξα ένα άλλο πρόγραμμα περιήγησης και το λάβαμε επίσης.
Όταν έλαβα το μήνυμα, δεν ήταν websocket, αλλά στην πραγματικότητα μια δημοσκόπηση HTTP, επειδή το js μας ανέφερε ένα σφάλμα
Όσο για το γιατί αναφέρθηκε το σφάλμα js, θα το συζητήσουμε την επόμενη φορά.
|