说明

HttpService是Http系服务器基类,但是不参与实际的数据交互,实际的数据交互由HttpSocketClient完成,所以HttpService的功能只是配置、激活、管理、注销、重建HttpSocketClient类实例。

可配置项

继承TcpService。

支持插件接口

声明自定义实例类,然后实现IHttpPlugin接口,即可实现下列事务的触发。
或者继承自HttpPluginBase类,重写相应方法即可。

|

IHttpPlugin

OnDelete 当收到Delete请求时
OnGet 当收到OnGet请求时
OnPost 当收到OnPost请求时
OnPut 当收到OnPut请求时
OnReceivedOtherHttpRequest 当收到OnReceivedOtherHttpRequest请求时

创建HttpService

HttpService的创建,基本和TcpService一致,也可以通过继承实现,下列仅演示最简单实现。

HttpService的相关事务,会通过插件触发。

  1. var service = new HttpService();
  2. var config = new RRQMConfig();
  3. config.UsePlugin()
  4. .SetReceiveType(ReceiveType.Auto)
  5. .SetListenIPHosts(new IPHost[] { new IPHost(7789) });
  6. service.Setup(config).Start();
  7. service.AddPlugin<MyHttpPlug>();
  8. Console.WriteLine("Http服务器已启动");

在插件中,通过重写(或实现)的方式,进入OnGetOnPostOnDeleteOnPut等函数,即可处理对应请求。

其中,通过e参数获得:

  1. e.Request:Http请求,可以获得一些请求信息。
  2. e.Response:Http响应,默认是null,如果需要响应,直接构造HttpResponse,然后赋值即可。
  1. /// <summary>
  2. /// 支持GET、Post、Put,Delete,或者其他
  3. /// </summary>
  4. class MyHttpPlug : HttpPluginBase
  5. {
  6. protected override void OnGet(ITcpClientBase client, HttpContextEventArgs e)
  7. {
  8. Console.WriteLine(e.Request.ToString());
  9. ////构建响应
  10. //HttpResponse response = new HttpResponse();
  11. //response.FromText("RRQM");
  12. ////对当前请求作出响应,在该事件结束后回应。
  13. //e.Response = response;
  14. ////或者直接构建响应,然后发送。
  15. //using (ByteBlock byteBlock=new ByteBlock())
  16. //{
  17. // response.Build(byteBlock);
  18. // client.DefaultSend(byteBlock);//使用DefaultSend发送能够完全怕排除适配器影响。
  19. //}
  20. base.OnGet(client, e);
  21. }
  22. protected override void OnReceivedOtherHttpRequest(ITcpClientBase client, HttpContextEventArgs e)
  23. {
  24. Console.WriteLine(e.Request.ToString());
  25. base.OnReceivedOtherHttpRequest(client, e);
  26. }
  27. }

创建HttpsService

Https服务器,和http服务器几乎一样,只不过增加了一个Ssl的配置。

  1. .SetServiceSslOption(new ServiceSslOption()
  2. {
  3. Certificate = new X509Certificate2("RRQMSocket.pfx", "RRQMSocket"),
  4. SslProtocols = SslProtocols.Tls12
  5. }))