You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.9 KiB

  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using System.Net.WebSockets;
  4. using System.Text;
  5. using System.Threading;
  6. using System;
  7. using System.Threading.Tasks;
  8. using System.Collections.Generic;
  9. namespace Shentun.Peis.Controllers
  10. {
  11. [Route("api/[controller]")]
  12. [ApiController]
  13. public class AiMessageWsController : ControllerBase
  14. {
  15. [HttpGet]
  16. public IAsyncEnumerable<string> GetData()
  17. {
  18. return GenerateDataAsync();
  19. }
  20. private async IAsyncEnumerable<string> GenerateDataAsync()
  21. {
  22. for (int i = 0; i < 100; i++)
  23. {
  24. await Task.Delay(100); // 模拟延迟
  25. yield return $"Data {i}";
  26. }
  27. }
  28. //public async Task HandleWebSocket()
  29. //{
  30. // if (HttpContext.WebSockets.IsWebSocketRequest)
  31. // {
  32. // using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
  33. // await ProcessDeepSeekStream(webSocket);
  34. // }
  35. // else
  36. // {
  37. // HttpContext.Response.StatusCode = StatusCodes.Status400BadRequest;
  38. // }
  39. //}
  40. //private async Task ProcessDeepSeekStream(WebSocket webSocket)
  41. //{
  42. // // 调用deepseek API
  43. // var stream = await GetDeepSeekStream();
  44. // foreach (var chunk in stream)
  45. // {
  46. // var buffer = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(chunk));
  47. // await webSocket.SendAsync(
  48. // new ArraySegment<byte>(buffer),
  49. // WebSocketMessageType.Text,
  50. // true,
  51. // CancellationToken.None);
  52. // }
  53. // await webSocket.CloseAsync(
  54. // WebSocketCloseStatus.NormalClosure,
  55. // "Stream completed",
  56. // CancellationToken.None);
  57. //}
  58. }
  59. }