CocoaAsyncSocketネットワーク通信で使用するProtobufインストール(五)
CocoaAsyncSocketネットワーク通信で使用するProtobufインストール(五)
Protocol BuffersはGoogleが発売したツールで、主にデータのシーケンス化と逆シーケンス化を処理し、データの異なるタイプに対して圧縮ストレージを行うことができ、ネットワークデータ伝送のサイズを減らすことができます.
一般的に、私たちはデータプロトコルを書くときに、異なるプラットフォームに対して複数回のデータ解析方法を実現する必要がありますが、Protocol Buffersのもう一つの機能は、1回のテンプレートカスタマイズ、マルチプラットフォームコンパイルで使用することです.
Protocol Buffersはc+、java、pythonをオリジナルでサポートしており、ios上でc++版のミキシングコードを使用することができますが、コンパイルプロセスが面倒で、iosではサードパーティのライブラリ(ocバージョン)を使用します.
ソースアドレス:https://github.com/alexeyxo/protobuf-objc
Protocol Buffersのインストール
1.まず自分のmacにHomebrewがインストールされているかどうかをチェックします.使用コマンド:brew-v
2.まだインストールされていない場合は、次のコマンドを使用してインストールしてください.
3.Homebrewをインストールしたら、次に必要なツールをインストールします.次のコマンドを実行します.
注意:protobufをインストールしたことがありますが、次のエラーが発生しました.not linkedを教えてください.処理手順は次のとおりです.
brew link--overwrite protobufコマンドが失敗する可能性があります.対応するprotocolディレクトリのファイル権限を上書きする権限はありません.1つずつ変更してから、コマンドを再試行してください.
4.任意のディレクトリでprotocコマンドを使用できるように、protocにショートカットリンクを作成します.もちろんこれはオプションで、環境変数を自分で構成しても同じ効果が得られます.リンクコマンドは次のとおりです.
5.次にgitからprotobufのocバージョンプロジェクトを引き出し、ディレクトリを自分の好みで保存します.コマンドは次のとおりです.
6.引き出したばかりのprotobuf-objcプロジェクトをコンパイルし、protobuf-objcプロジェクトディレクトリに入り、次のコマンドを順次実行する
注:手順3のインストールとリンクに失敗した場合、手順6では成功しない可能性があります.私は次のような間違いに遭遇して、何度も研究した後、ついに原因が第3歩の未linkedによるものであることを発見しました.
7.作成protoファイル、すなわちデータ構造の記述ファイルは、ここではあまり言わず、直接ファイルの内容をテストする.
8.protocコマンドで.protoファイルはobject-cコードにコンパイルされます.
9.protobufのiosでの使用.
10.Personオブジェクトの使用
Personを導入するpb.h,Person.pb.mファイル、コンパイル運転工程
demo:https://github.com/zhu410289616/RHSocketKit
サービス側エンジニアリングdemo:RHSocketServerDemo
顧客度エンジニアリングdemo:RHSocketKitDemo
email: [email protected]
qq: 410289616
qq群:3305855393
2016.2.25
Protocol BuffersはGoogleが発売したツールで、主にデータのシーケンス化と逆シーケンス化を処理し、データの異なるタイプに対して圧縮ストレージを行うことができ、ネットワークデータ伝送のサイズを減らすことができます.
一般的に、私たちはデータプロトコルを書くときに、異なるプラットフォームに対して複数回のデータ解析方法を実現する必要がありますが、Protocol Buffersのもう一つの機能は、1回のテンプレートカスタマイズ、マルチプラットフォームコンパイルで使用することです.
Protocol Buffersはc+、java、pythonをオリジナルでサポートしており、ios上でc++版のミキシングコードを使用することができますが、コンパイルプロセスが面倒で、iosではサードパーティのライブラリ(ocバージョン)を使用します.
ソースアドレス:https://github.com/alexeyxo/protobuf-objc
Protocol Buffersのインストール
1.まず自分のmacにHomebrewがインストールされているかどうかをチェックします.使用コマンド:brew-v
zhuruhongdeMacBook-Pro:ios zhuruhong$ brew -v
Homebrew 0.9.5 (git revision 30c54; last commit 2016-02-16)
2.まだインストールされていない場合は、次のコマンドを使用してインストールしてください.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
3.Homebrewをインストールしたら、次に必要なツールをインストールします.次のコマンドを実行します.
brew install automake
brew install libtool
brew install protobuf
注意:protobufをインストールしたことがありますが、次のエラーが発生しました.not linkedを教えてください.処理手順は次のとおりです.
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ brew install protobuf
Warning: protobuf-2.6.1 already installed, it's just not linked
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ brew link protobuf
Linking /usr/local/Cellar/protobuf/2.6.1...
Error: Could not symlink include/google/protobuf/compiler/code_generator.h
Target /usr/local/include/google/protobuf/compiler/code_generator.h
already exists. You may want to remove it:
rm '/usr/local/include/google/protobuf/compiler/code_generator.h'
To force the link and overwrite all conflicting files:
brew link --overwrite protobuf
To list all files that would be deleted:
brew link --overwrite --dry-run protobuf
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ brew link --overwrite protobuf
Linking /usr/local/Cellar/protobuf/2.6.1... 70 symlinks created
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$
brew link--overwrite protobufコマンドが失敗する可能性があります.対応するprotocolディレクトリのファイル権限を上書きする権限はありません.1つずつ変更してから、コマンドを再試行してください.
4.任意のディレクトリでprotocコマンドを使用できるように、protocにショートカットリンクを作成します.もちろんこれはオプションで、環境変数を自分で構成しても同じ効果が得られます.リンクコマンドは次のとおりです.
ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin
5.次にgitからprotobufのocバージョンプロジェクトを引き出し、ディレクトリを自分の好みで保存します.コマンドは次のとおりです.
git clone https://github.com/alexeyxo/protobuf-objc.git
6.引き出したばかりのprotobuf-objcプロジェクトをコンパイルし、protobuf-objcプロジェクトディレクトリに入り、次のコマンドを順次実行する
./autogen.sh
make
make install
注:手順3のインストールとリンクに失敗した場合、手順6では成功しない可能性があります.私は次のような間違いに遭遇して、何度も研究した後、ついに原因が第3歩の未linkedによるものであることを発見しました.
./google/protobuf/descriptor.pb.h:2840:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2848:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2856:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2864:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2872:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2876:75: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
package_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
7.作成protoファイル、すなわちデータ構造の記述ファイルは、ここではあまり言わず、直接ファイルの内容をテストする.
message Person {
required int32 id = 1;
required string name = 2;
optional string email = 3;
}
8.protocコマンドで.protoファイルはobject-cコードにコンパイルされます.
protoc --objc_out=./ Person.proto //oc ,
protoc --cpp_out=./ *.proto //c++
proton —java_out=./ *.proto //java
9.protobufのiosでの使用.
Podfile oc protocol buffers :
pod 'ProtocolBuffers', '~> 1.9.9.2’
10.Personオブジェクトの使用
Personを導入するpb.h,Person.pb.mファイル、コンパイル運転工程
demo:https://github.com/zhu410289616/RHSocketKit
サービス側エンジニアリングdemo:RHSocketServerDemo
顧客度エンジニアリングdemo:RHSocketKitDemo
email: [email protected]
qq: 410289616
qq群:3305855393
2016.2.25