ΠΡΠΈΠ²Π΅Ρ,
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΠ΅ΡΠ²Π΅Ρ SingalR Ρ .Net Framework 4.5.2 ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ SignalR (ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) Ρ .Net Framework 4.5.2, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ:
Π‘Π΅ΡΠ²Π΅Ρ:
ΠΠ»ΠΈΠ΅Π½Ρ:
ΠΡΠ΅ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄.
ΠΠΎ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ SignalR Π² ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ .Net Core 2.0, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΡ ΠΆΠ΅ Π²Π΅ΡΡΠΈΡ Microsoft.AspNet.SignalR.Client. ΠΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠ°ΡΠΎΡΠ°. ΠΡΡΡ Π»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΡΠΈΠΌ nuget Π² .Net Core?
ΠΡΠΎ ΠΊΠΎΠ΄:
var hubProxy = hubConnection.CreateHubProxy("MyHub");
hubProxy.On("created", data =>
{
Console.WriteLine("Incoming Created data: {0}", data);
});
hubProxy.On("deleted", data =>
{
Console.WriteLine("Incoming Deleted data: {0}", data);
});
hubConnection.Start().ContinueWith(x =>
{
hubProxy.Invoke("subscribe", "firstFeature", "secontFeature");
}).Wait();
Console.WriteLine("Connected to {0}", hubConnection.Url.ToString());
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
ΠΡΠΈΠ²Π΅Ρ @georginacm
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π·Π°Π΄Π°ΡΡ Π²ΠΎΠΏΡΠΎΡ Π·Π΄Π΅ΡΡ https://github.com/aspnet/SignalR, ΡΡΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ΄ΡΠΎΠΌ ΡΠ΅ΡΠΈ signalR.
Π‘ Π£Π²Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΡΠΈΠ²Π΅Ρ!
Π― ΡΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ: https://github.com/aspnet/SignalR/issues/2156 ΠΈ ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΠΌΠ΅Π½Ρ ΡΡΠ΄Π° ...
ΠΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΏΠΎ. ΠΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ ΠΏΠΎΠ΄Π½ΡΠ»ΠΈ .NET Core, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π»ΠΈ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ SignalR ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ .NET Core? Π’.Π΅. ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΡΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ Π² .NET Framework?
ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
ΠΠ°ΠΊΡΡΡΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π΅ ΡΠ»ΡΡΠ°Π»ΠΈ ΠΎΡ Π²Π°Ρ. ΠΠ΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΈΡΠ΅ΠΌ, ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π΅ΡΠ»ΠΈ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π― Ρ ΠΎΡΠ΅Π» Π±Ρ ΡΠ½ΠΎΠ²Π° ΠΎΡΠΊΡΡΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΏΠΎΡΡΠΈ ΡΠΎΡΠ½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈ Β«Π²Π΅ΡΠΎΡΡΠ½ΠΎΒ» ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠ±ΠΎΠΉ.
net461 ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Microsoft.AspNet.SignalR "Version =" 2.2.3 "
ΠΊΠ»ΠΈΠ΅Π½Ρ net461 ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Microsoft.AspNet.SignalR.Client "Version =" 2.2.3 "
Π²ΡΠ΅ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π²Π΅Π±-ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ, Π΄Π΅Π»Π°Π΅Ρ Π²ΡΠ·ΠΎΠ² ( call it subscribe or join group
), ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅.
Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ ΠΈΠ·ΠΌΠ΅Π½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Ρ
<TargetFramework>net461</TargetFramework>
ΠΊ
<TargetFramework>netcoreapp2.0</TargetFramework>
Π― ΠΌΠΎΠ³Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ SSE, ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ InvalidOperation ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ invoke
. ΠΠ½ΠΎΠ³Π΄Π° invoke
ΡΠ΄Π°Π²Π°Π»ΠΎΡΡ, Π½ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΡΠΏΠ΅Ρ
Π° Π½Π΅ΡΡΠ΅Π½.
ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² Π½Π°ΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΈ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΡΡ ΠΆΡΡΠ½Π°Π»Ρ ΡΡΠ΄Π°? (ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΈ Π²ΡΡΠ°Π²Π»ΡΠΉΡΠ΅ ΠΈΡ , ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ ΡΠ°ΠΉΠ» Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΆΡΡΠ½Π°Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ΅, ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡ Π² ΡΠ΅Π»Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡΠ΅Π½Ρ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΠΏΡΠΎΡΠΌΠΎΡΡ).
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ.
ΠΏΠΎΡ ΠΎΠΆΠ΅, Ρ ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π½Π°Π³ΡΡΠ·ΠΊΠΈ. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π½ΠΎ invoke ΡΠ΅Π» Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ. Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠΉ LB Π±ΡΠ» F5 big-ip, ΠΎΠ½ Π½ΡΠΆΠ΄Π°Π»ΡΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΡΡΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π½ΠΎ Π²ΡΠ·ΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅.
ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π² ASP.NET SignalR, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠ»Π°ΡΠ°. Π‘ΠΌ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π΄Π΅ΡΡ: https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-in-signalr
Π£ ΠΌΠ΅Π½Ρ Π½Π΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡ, ΠΈ Ρ Π½Π΅ Ρ
ΠΎΡΡ Π΅Π΅. ΠΠ°ΠΆΠ΄ΡΠΉ Π‘Π΅ΡΠ²Π΅Ρ Π±ΡΠ» ΡΠ½Π°Π±ΠΆΠ΅Π½ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. ΡΠ»Π΅Π½ΡΡΠ²ΠΎ Π² Π³ΡΡΠΏΠΏΠ΅ Π±ΡΠ»ΠΎ ΠΊΠ»ΡΡΠΎΠΌ fault
ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π° Π½ΡΠΆΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ.
Π― ΠΏΠΎΡΡΠΈ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΌΠΎΠ³Ρ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠΎ Π·Π°ΠΊΡΡΡΡΠΌ. ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ΄ΡΠ° dotnet, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ framework signalr.client, Ρ ΠΌΠ΅Π½Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Ρ 3 ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠ° Π½Π°Π³ΡΡΠ·ΠΊΠΈ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ!
Π― ΡΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ: https://github.com/aspnet/SignalR/issues/2156 ΠΈ ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΠΌΠ΅Π½Ρ ΡΡΠ΄Π° ...