我正在尝试从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端点进行了验证。
但是,我的方法有两个主要缺点:
[我试图找到一个可以用修改后的组件TMyNetHTTPClient替换TNetHTTPClient的地方,但是我没有成功。
所以,问题是:如何基于TWinHTTPClient创建一个支持http2并在不关闭连接的情况下实现OnDataReceived事件的TNetHTTPClient替代项?
它不是基于TNetHTTPClient,但是grijjy已经为Windows和Linux开源了HTTP2 Delphi客户端。
您可以在这里找到它-https://github.com/grijjy/DelphiScalableClientSockets