Delphi的TNetHTTPClient后代支持http2

问题描述 投票:1回答:1

我正在尝试从Delphi 10.3.1 Windows客户端应用程序通过gRPC与Google Cloud Speech通信。为此,通信需要使用http2作为协议,并且数据需要双向异步传输。

Delphi包含TNetHTTPClient,它由TNetHTTPRequest用于HTTP通信。使用调试器,我发现System.Net.HttpClient.Win.pas中的TWinHTTPClient在内部用于通信。

[为了添加http2支持,我在System.Net.HttpClient.Win.pas的TWinHTTPClient.DoExecuteRequest中的1360行中插入了2行:

    LOptionValue := 1;//WINHTTP_PROTOCOL_FLAG_HTTP2;
    WinHttpSetOption(LRequest.FWRequest, WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL, @LOptionValue, sizeof(LOptionValue));

添加上述代码后,该组件使用的是http2,我已通过gRPC成功调用Google Cloud Speech Sync Request端点进行了验证。

但是,我的方法有两个主要缺点:

  1. 需要Delphi源代码修改。
  2. 它不支持数据的异步双向传输,为此,我认为有必要在不关闭连接的情况下触发一个OnDataReceived事件。

[我试图找到一个可以用修改后的组件TMyNetHTTPClient替换TNetHTTPClient的地方,但是我没有成功。

所以,问题是:如何基于TWinHTTPClient创建一个支持http2并在不关闭连接的情况下实现OnDataReceived事件的TNetHTTPClient替代项?

delphi grpc http2
1个回答
0
投票

它不是基于TNetHTTPClient,但是grijjy已经为Windows和Linux开源了HTTP2 Delphi客户端。

您可以在这里找到它-https://github.com/grijjy/DelphiScalableClientSockets

© www.soinside.com 2019 - 2024. All rights reserved.