ZYHttpServer.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Microsoft.Extensions.DependencyInjection;
  2. using Microsoft.Extensions.Hosting;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using ZYSocket;
  9. using ZYSocket.Server;
  10. using ZYSocket.Server.Builder;
  11. namespace PlatformBenchmarks
  12. {
  13. public class ZYHttpServer : IHostedService
  14. {
  15. public ISocketServer SocketServer { get; private set; }
  16. public IServiceProvider serviceProvider { get; private set; }
  17. public HttpHandler @HttpHandler { get; private set; }
  18. public ZYHttpServer()
  19. {
  20. ArraySegment<byte> date = GMTDate.Default.DATE;
  21. var containerBuilder = new ServiceCollection();
  22. new SockServBuilder(containerBuilder, p =>
  23. {
  24. return new ZYSocketSuper(p)
  25. {
  26. BinaryInput = new BinaryInputHandler(BinaryInputHandler),
  27. Connetions = new ConnectionFilter(ConnectionFilter),
  28. MessageInput = new DisconnectHandler(DisconnectHandler)
  29. };
  30. })
  31. .ConfigServer(p =>
  32. {
  33. p.Port = 8080;
  34. p.MaxBufferSize = 1024;
  35. p.MaxConnectCout = 20000;
  36. });
  37. serviceProvider = containerBuilder.BuildServiceProvider();
  38. SocketServer = serviceProvider.GetRequiredService<ISocketServer>();
  39. @HttpHandler = new HttpHandler();
  40. }
  41. public Task StartAsync(CancellationToken cancellationToken)
  42. {
  43. SocketServer.Start();
  44. return Task.CompletedTask;
  45. }
  46. public Task StopAsync(CancellationToken cancellationToken)
  47. {
  48. SocketServer.Stop();
  49. return Task.CompletedTask;
  50. }
  51. bool ConnectionFilter(ISockAsyncEvent socketAsync) => true;
  52. void DisconnectHandler(string message, ISockAsyncEvent socketAsync, int erorr)
  53. {
  54. socketAsync.UserToken = null;
  55. socketAsync.AcceptSocket.Dispose();
  56. }
  57. async void BinaryInputHandler(ISockAsyncEvent socketAsync)
  58. {
  59. var fiberRw = await socketAsync.GetFiberRw<HttpToken>();
  60. fiberRw.UserToken = new HttpToken
  61. {
  62. Db = new RawDb(new ConcurrentRandom(), Npgsql.NpgsqlFactory.Instance)
  63. };
  64. using var data_r = fiberRw.GetMemory(1024);
  65. using var write = new WriteBytes(fiberRw);
  66. for (; ; )
  67. {
  68. await HttpHandler.Receive(fiberRw, data_r.Memory, write);
  69. }
  70. }
  71. }
  72. }