中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

asp.net websocket啥流程

小樊
81
2024-11-23 06:00:17
欄目: 編程語言

ASP.NET Core WebSocket 是一種在 ASP.NET Core 應用程序中實現實時雙向通信的技術。以下是使用 ASP.NET Core WebSocket 的流程:

  1. 創建 WebSocket 中間件:首先,需要在 ASP.NET Core 應用程序中創建一個 WebSocket 中間件。這可以通過在 Startup.cs 文件中的 Configure 方法中添加以下代碼來實現:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapWebSocket("/ws");
    });
}
  1. 創建 WebSocket 處理程序:接下來,需要創建一個處理 WebSocket 連接和消息的類。這可以通過創建一個新的類并實現 IDisposable 接口來實現:
public class MyWebSocketHandler : IDisposable
{
    private readonly WebSocket _webSocket;
    private readonly Task _listenTask;

    public MyWebSocketHandler(WebSocket webSocket)
    {
        _webSocket = webSocket;
        _listenTask = ListenAsync();
    }

    private async Task ListenAsync()
    {
        while (! _webSocket.CloseStatus.HasValue)
        {
            var result = await _webSocket.ReceiveAsync();
            if (result.CloseStatus.HasValue)
            {
                break;
            }

            // 處理接收到的消息
            var message = Encoding.UTF8.GetString(result.Buffer);
            Console.WriteLine($"Received message: {message}");

            // 發送響應消息
            var response = Encoding.UTF8.GetBytes($"Echo: {message}");
            await _webSocket.SendAsync(new ArraySegment<byte>(response), result.MessageType, result.EndOfMessage);
        }
    }

    public void Dispose()
    {
        _webSocket.Dispose();
    }
}
  1. 在控制器中使用 WebSocket:現在可以在控制器中使用 WebSocket。例如,在 HomeController.cs 文件中,可以添加一個處理 WebSocket 連接的方法:
[HttpGet]
public async Task<IActionResult> Index(string id)
{
    if (id == "ws")
    {
        var webSocket = new WebSocketOptions
        {
            // 設置 WebSocket 選項,如子協議等
        };

        using (var handler = new MyWebSocketHandler(HttpContext.WebSockets.AcceptWebSocket(webSocket)))
        {
            // 等待 WebSocket 連接關閉
            await handler.ListenTask;
        }
    }

    return View();
}
  1. 創建前端頁面:最后,需要創建一個前端頁面來與 WebSocket 服務器進行通信。這可以通過使用 JavaScript 的 WebSocket API 來實現:
<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Example</title>
</head>
<body>
    <h1>WebSocket Example</h1>
    <input type="text" id="messageInput" placeholder="Type a message">
    <button id="sendButton">Send</button>
    <ul id="messages"></ul>

    <script>
        const webSocket = new WebSocket('ws://' + window.location.host + '/ws');

        webSocket.addEventListener('open', (event) => {
            console.log('WebSocket connection opened:', event);
        });

        webSocket.addEventListener('message', (event) => {
            const messagesList = document.getElementById('messages');
            const messageItem = document.createElement('li');
            messageItem.textContent = event.data;
            messagesList.appendChild(messageItem);
        });

        document.getElementById('sendButton').addEventListener('click', () => {
            const input = document.getElementById('messageInput');
            webSocket.send(input.value);
            input.value = '';
        });
    </script>
</body>
</html>

現在,當用戶訪問前端頁面并輸入一條消息后,瀏覽器將通過 WebSocket 連接將消息發送到服務器,服務器將處理消息并將響應發送回客戶端。客戶端將顯示接收到的響應消息。

0
岑溪市| 昌平区| 东平县| 焉耆| 望奎县| 东阿县| 启东市| 盐山县| 遂宁市| 泉州市| 广西| 济阳县| 手游| 汉寿县| 吐鲁番市| 铅山县| 化州市| 三江| 疏附县| 浮梁县| 蓝山县| 洛宁县| 昭平县| 茂名市| 邮箱| 霍城县| 保亭| 和政县| 巴南区| 仪陇县| 黄石市| 承德县| 柏乡县| 徐汇区| 葫芦岛市| 沭阳县| 永城市| 鹿泉市| 重庆市| 仪征市| 石门县|