我正在尝试从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行插入了两行:
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替代项?
答案 0 :(得分:0)
它不是基于TNetHTTPClient,但是grijjy已经为Windows和Linux开放了HTTP2 Delphi客户端的源代码。
您可以在这里找到它-https://github.com/grijjy/DelphiScalableClientSockets