protobuf訊息的自動派發

來源:互聯網
上載者:User

google protobuf訊息序列化後的資料是沒有類型資訊的。而一般網路應用要求序列化後發送到對端,還原出類型,還原序列化,再派發給相應的訊息處理函數。

以下代碼簡單實現了自動派發的機制。新增protobuf訊息只要增加一行聲明的代碼和相應的處理函數就可以了。

http://eddyserver.googlecode.com/svn/trunk/common/tests/protoserver.cc

 

 

#define DECLARE_MESSAGE(x) case k##x##ID: /<br /> {/<br /> proto::x message;/<br /> message.ParseFromIstream(&io);/<br /> MessageHandler(message);/<br /> }/<br /> break;<br />#include "proto.h"<br />#undef DECLARE_MESSAGE 

這段代碼用了一些宏技巧,實現在proto.h聲明新訊息時自動產生相應的case分支。

proto_def.h也用了類似的技巧,來自動產生protobuf訊息的類型標識和一些通過類型擷取標識的模板。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.