์๋ ํ์ธ์.
ASP.NET Core Web API ์๋น์ค๋ฅผ
UseKestrel ํตํด ์
ํ ํธ์คํ
์ผ๋ก ์ฌ์ฉํ ๊ณ ์์ต๋๋ค. (IIS ์ฌ์ฉ X)
Web API์ SignalR ์๋น์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด ์๋น์ค๋ฅผ ๋ฑ๋กํ๊ณ
Hub๊ตฌ์ฑ์ ํ์๋๋ฐ์โฆ
[Startup.cs]
services.AddSignalR(option =>
{
option.HandshakeTimeout = new TimeSpan(0, 1, 0);
option.KeepAliveInterval = new TimeSpan(0, 1, 0);
option.EnableDetailedErrors = true;
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<PlaceHub>("/placeHub");
);
์์ ๊ฐ์ด ์ค์ ํ ์น์์ผ ์๋ฒ๊ฐ Open๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค.
์น์์ผ ํด๋ผ์ด์ธํธ๋ ์ผ๋ฐ C# Console ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ํด
signalR ํด๋ผ์ด์ธํธ๊ฐ ์๋ System.Net.WebSockets ์ ์ด์ฉํด์ ์ง์
ASP.NET Core Web API ์น์์ผ ์๋ฒ์ ์ ์ ์์ผฐ์ต๋๋ค.
์ฐธ๊ณ : aspnetcore/Program.cs at main ยท dotnet/aspnetcore (github.com)
์น์๋ฒ์ ์ ์ ๊น์ง๋ ๊ฐ๋ฅํ๋ Receiving์์ ReceiveAsync()ํธ์ถ์ ํ๋ฉด
์์ ์๋ฒ์์ ์ค์ ํ ํธ๋์์ดํฌ ํ์์์ ์๊ฐ ์ดํ์
์๋ฒ์ธก์ผ๋ก ๋ถํฐ handshake was canceled ์ค๋ฅ๊ฐ ๋ฉ์ธ์ง๊ฐ ์ ๋ฌ ๋ฉ๋๋ค.
- ์ฝ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ ์ ์ ํต์ ์ด ๋ฉ๋๋ค.,
- wss ์ฌ์ฉ์ด ์๋ ws๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
ํน์ ํด๋น ์ด์์ ๋ํด ์์ธ๊ณผ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์๊ณ ๊ณ์ ๋ถ ๊ณ์๋ฉด ๋ต๋ณ ๋ถํ๋๋ฆฝ๋๋ค.
ํน์๋ ํ์ฌ Web API ์๋ฒ์ธก Hub ์ฝ๋๋ ์ฌ๋ฆฝ๋๋ค.
public class PlaceHub : Hub
{
public override Task OnConnectedAsync()
{
return Clients.All.SendAsync("ServerMsg", "Connected");
}
public override Task OnDisconnectedAsync(Exception exception)
{
return Clients.All.SendAsync("ServerMsg", "Disconnecte");
}
public Task SendToOthers(string senderID, string tickerCode, string ticker, double price, double units, double weight, string type, string kind)
{
return Clients.Others.SendAsync("Place", senderID, tickerCode, ticker, price, units, weight, type, kind);
}
}