您好,登錄后才能下訂單哦!
今天小編給大家分享一下ProtoBuf gRPC分析請求頭怎么配置的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Protobuf是Google protocol buffer的簡稱,是一種語言中立、平臺無關(guān)、易于擴展的結(jié)構(gòu)化數(shù)據(jù)序列化技術(shù),可用于數(shù)據(jù)傳輸、存儲等領(lǐng)域。 與Protoful類似的序列化技術(shù)還有XML、JSON、Thrift等,但Protoful更快、更小、更簡單,且具備良好的兼容性。
目前經(jīng)常運用在 安卓直播彈幕等業(yè)務(wù)場景中
只設(shè)置客戶端請求時附帶的header
類 io.grpc.stub.MetadataUtils,其中有個方法
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1789") public static <T extends AbstractStub<T>> T attachHeaders( T stub, final Metadata extraHeaders) { return stub.withInterceptors(newAttachHeadersInterceptor(extraHeaders)); }
**<br>自己封裝后
private static <T extends AbstractStub<T>> T attachHeaders(T stub, final Map<String, String> headerMap) { Metadata extraHeaders = new Metadata(); if (headerMap != null) { for (String key : headerMap.keySet()) { Metadata.Key<String> customHeadKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); extraHeaders.put(customHeadKey, headerMap.get(key)); } } return MetadataUtils.attachHeaders(stub, extraHeaders); }
**
支持設(shè)置客戶端請求的header以及獲取服務(wù)端返回結(jié)果中的header
官方demo
官方完整Demo
class HeaderClientInterceptor implements ClientInterceptor { private static final String TAG = "HeaderClientInterceptor"; private Map<String, String> mHeaderMap; public HeaderClientInterceptor(Map<String, String> headerMap) { mHeaderMap = headerMap; } @Override public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) { return new SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) { @Override public void start(Listener<RespT> responseListener, Metadata headers) { /* put custom header */ if (mHeaderMap != null) { for (String key : mHeaderMap.keySet()) { Metadata.Key<String> customHeadKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); headers.put(customHeadKey, mHeaderMap.get(key)); } } Logger.i(TAG, "header send to server:" + headers); super.start(new SimpleForwardingClientCallListener<RespT>(responseListener) { @Override public void onHeaders(Metadata headers) { /** * if you don't need receive header from server, * you can use {@link io.grpc.stub.MetadataUtils attachHeaders} * directly to send header */ Logger.i(TAG, "header received from server:" + headers); super.onHeaders(headers); } }, headers); } }; } }
_
Map<String, String> headerMap = new HashMap<>(); //... ClientInterceptor interceptor = new HeaderClientInterceptor(headerMap); //... ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext(true).build(); Channel channel = ClientInterceptors.intercept(managedChannel, interceptor); // then create stub here by this channel
**
要實現(xiàn)添加header 那么必須實現(xiàn) ClientInterceptor
接口類中的 interceptCall
的方法
而且還要有一個 添加Header的具體方法
不管 grpc 怎么混淆都離不開這種配置模式
例如這種<br>注意他們的類型,很明顯這種情況可以快速推論
z1.c.v.p.a.d.b.f.a.a()
大概率就是混淆后的 interceptCall
z1.c.v.p.a.d.b.f.a.c()
是添加請求頭的函數(shù)
以上就是“ProtoBuf gRPC分析請求頭怎么配置”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。