Signalr: рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА => рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░реЙрдХреНрд╕реА рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рд╕рд┐рддре░ 2016  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: SignalR/SignalR

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдпрджрд┐ рдЖрдк jQuery рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ URL рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ SignalR рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ URL рдХреЗ рд╕рд╛рде рднреА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЙрддреНрдкрдиреНрди рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдХреЗ рд╕рд╛рдеред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдорд╡реАрд╕реА рдЖрдИрдЖрдИрдПрд╕ рдкрд░/(рд░реВрдЯ) рдкрд░ рдРрдк рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИред

рдПрд╕рдПрд╕рдПрд▓ рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ / рдХреЛ / рдЬреЛ рдХреБрдЫ рднреА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдмреЗрд╢рдХ рд╕рд┐рдЧреНрдирд▓рдЖрд░ рд╕реЛрдЪрддрд╛ рд╣реИ /рд╕рд┐рдЧреНрдирд▓/рд╣рдм рдЗрд╕рд▓рд┐рдП рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ /рдЬреЛ рднреА/рд╕рд┐рдЧреНрдирд▓/рд╣рдм рд╣реИ

Jquery рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рд╛рд░рдВрдн url рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
рдХрд┐рд╕реА рднреА рдХреЙрд▓ рдкрд░, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рд╣рдореЗрд╢рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╕рд╛рдкреЗрдХреНрд╖ рдпреВрдЖрд░рдПрд▓ рд▓реЗрдВред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

jQuery рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХрдм рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ $.connection.hub.url = "/whatever/signalr/hubs"
рдмрд╛рддрдЪреАрдд HTTP 200 рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ
рдЖрдИрдЖрдИрдПрд╕ рдРрдкрдкреВрд▓ рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдпреВрдЖрд░рдПрд▓ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред

рддреЛ рдирд┐рдореНрди рдХрдиреЗрдХреНрдЯ 404 рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдм рд╕реЗ рдпреВрдЖрд░рдПрд▓ рд▓реЗрдиреЗ рдХреЗ рдХрд╛рд░рдг/ рдмрд╛рддрдЪреАрдд рдЙрддреНрддрд░ рдЗрд╕ рдЧрд▓рдд рдХреЗ рд▓рд┐рдП

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

рдХрд┐рд╕реА рднреА рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА (рдЕрдкрд╛рдЪреЗ/nginx/рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЖрдИрдЖрдИрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдпреВрдЖрд░рдПрд▓ рдкрд░ рдореИрдк рдХрд░реЗрдВ
рдЖрдИрдЖрдИрдПрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдм.рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 $(function () {
        var ip = $.connection.imageProcessor;
        var path = "../../signalr";
        $.connection.hub.url = path;
        //USAGE LIKE  $.hubConnection(.(path, { useDefaultPath: false } ?
        // FUNCTIONS
        ip.client.ping = function () {
            console.log("Ping");
        };
        // EVENTS
        $.connection.hub.disconnected(function () {
            console.log("Disconnected");
        });
        $.connection.hub.start().done(function () {
            console.log("Started");
        });
    });

рдореЛрд▓ - рднрд╛рд╡ рдХрд░рдирд╛

image

рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо

image

рдХрдиреЗрдХреНрдЯ рдХреЙрд▓ рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЧрд▓рдд url

image

image

image

рдЧреИрд░ рдЙрддреНрдкрдиреНрди рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рднреА рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛:

var path = "../../signalr";
        var connection = $.hubConnection(path, { useDefaultPath: false });
        var ip = connection.createHubProxy('imageProcessor');
        connection.start(function (d) {
        });

image

рд╕рд░реНрд╡рд░ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ URL рд╣рдореЗрд╢рд╛ рдЬреАрддрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрди: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдмрджрд▓рддреЗ рд╣реИрдВ:

var getUrl = $.signalR.transports._logic.getUrl;
        $.signalR.transports._logic.getUrl = function(connection, transport, reconnecting, poll, ajaxPost) {
            var url = getUrl(connection, transport, reconnecting, poll, ajaxPost);
            return connection.url + url.substring(url.indexOf(connection.appRelativeUrl) + connection.appRelativeUrl.length);
        };

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдлрд┐рдХреНрд╕ :

https://github.com/SignalR/SignalR/blob/799d9bc32524066344cb3656e5f28f2fd03ba9b3/src/Microsoft.AspNet.SignalR.Client.JS/jquery.signalR.transports.common.js

рд╕реЗ

getUrl: function (connection, transport, reconnecting, poll, ajaxPost) {
            /// <summary>Gets the url for making a GET based connect request</summary>
            var baseUrl = transport === "webSockets" ? "" : connection.baseUrl,
                url = baseUrl + connection.appRelativeUrl,
                qs = "transport=" + transport;

            if (!ajaxPost && connection.groupsToken) {
                qs += "&groupsToken=" + window.encodeURIComponent(connection.groupsToken);
            }

рдкрд░рд┐рд╡рд░реНрддрд┐рдд/рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛

getUrl: function (connection, transport, reconnecting, poll, ajaxPost) {
            /// <summary>Gets the url for making a GET based connect request</summary>
            var baseUrl = transport === "webSockets" ? "" : connection.baseUrl,
                url = baseUrl + connection.appRelativeUrl,
                qs = "transport=" + transport;

            //take my url, if not the same!
        if (url != connection.url) {
                url = connection.url;
            }

            if (!ajaxPost && connection.groupsToken) {
                qs += "&groupsToken=" + window.encodeURIComponent(connection.groupsToken);
            }

рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ / (рд░реВрдЯ) рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

image

рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрди: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдмрджрд▓рддреЗ рд╣реИрдВ:

var getUrl = $.signalR.transports._logic.getUrl;
        $.signalR.transports._logic.getUrl = function(connection, transport, reconnecting, poll, ajaxPost) {
            var url = getUrl(connection, transport, reconnecting, poll, ajaxPost);
            return connection.url + url.substring(url.indexOf(connection.appRelativeUrl) + connection.appRelativeUrl.length);
        };

https://blogs.msdn.microsoft.com/webdev/2018/09/17/the-future-of-asp-net-signalr/ рдореЗрдВ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреА рд╕рдлрд╛рдИ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Vaccano picture Vaccano  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

markrendle picture markrendle  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tanaka-takayoshi picture tanaka-takayoshi  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cceraja picture cceraja  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ