溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

AJAX在C#中處理WebSocket消息

發(fā)布時(shí)間:2024-09-09 16:23:58 來(lái)源:億速云 閱讀:80 作者:小樊 欄目:編程語(yǔ)言

在C#中,您可以使用ASP.NET Core的WebSocket API來(lái)處理WebSocket消息

  1. 首先,確保已安裝ASP.NET Core。如果尚未安裝,請(qǐng)?jiān)L問(wèn) https://dotnet.microsoft.com/download 并按照說(shuō)明進(jìn)行操作。

  2. 創(chuàng)建一個(gè)新的ASP.NET Core Web應(yīng)用程序項(xiàng)目。在命令提示符或終端中,運(yùn)行以下命令:

dotnet new webapp -o WebSocketExample
cd WebSocketExample
  1. 打開Startup.cs文件,然后在Configure方法中添加以下代碼以啟用WebSocket中間件:
app.UseWebSockets();
  1. Startup.cs文件中,導(dǎo)入以下命名空間:
using System.Net.WebSockets;
using System.Threading.Tasks;
  1. 創(chuàng)建一個(gè)新的控制器類(例如WebSocketController.cs),并添加以下代碼:
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

[Route("api/websocket")]
public class WebSocketController : ControllerBase
{
    [HttpGet]
    public async Task Get()
    {
        if (HttpContext.WebSockets.IsWebSocketRequest)
        {
            using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
            await ProcessWebSocket(webSocket);
        }
        else
        {
            HttpContext.Response.StatusCode = 400;
        }
    }

    private async Task ProcessWebSocket(WebSocket webSocket)
    {
        var buffer = new byte[1024 * 4];
        var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);

        while (!result.CloseStatus.HasValue)
        {
            // Process the received message
            var message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
            Console.WriteLine($"Received message: {message}");

            // Send a response to the client
            var response = "Message received";
            var responseBytes = System.Text.Encoding.UTF8.GetBytes(response);
            await webSocket.SendAsync(new ArraySegment<byte>(responseBytes), WebSocketMessageType.Text, true, CancellationToken.None);

            // Wait for the next message
            result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
        }

        await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
    }
}
  1. 現(xiàn)在,您可以運(yùn)行Web應(yīng)用程序并通過(guò)WebSocket連接到/api/websocket端點(diǎn)。您可以使用JavaScript的WebSocket對(duì)象來(lái)實(shí)現(xiàn)客戶端連接。以下是一個(gè)簡(jiǎn)單的HTML和JavaScript示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>WebSocket Example</title>
</head>
<body>
   <script>
        const socket = new WebSocket('ws://localhost:5000/api/websocket');

        socket.onopen = (event) => {
            console.log('WebSocket connection opened:', event);
            socket.send('Hello, server!');
        };

        socket.onmessage = (event) => {
            console.log('Received message from server:', event.data);
        };

        socket.onclose = (event) => {
            console.log('WebSocket connection closed:', event);
        };

        socket.onerror = (event) => {
            console.error('WebSocket error:', event);
        };
    </script>
</body>
</html>

將此HTML代碼保存為index.html文件,并在瀏覽器中打開它。查看瀏覽器的開發(fā)者工具中的控制臺(tái),您應(yīng)該會(huì)看到與服務(wù)器的WebSocket連接以及發(fā)送和接收的消息。

這就是如何在C#中使用ASP.NET Core處理WebSocket消息。您可以根據(jù)需要修改ProcessWebSocket方法以處理不同類型的消息和響應(yīng)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI