Python + Flask + Protobuf + iOS

user.proto

syntax = "proto3";
message User{
        string name = 1;
        int32 age =2;
}

生成 iOS user.proto.m/h
protoc *.proto --objc_out=./

生成 python user.proto.py
protoc *.proto --python_out=./


main.py

from flask import Flask, request
from user_pb2 import User
app = Flask(__name__)

@app.route('/proto',methods=["POST"])
def hello_world():
    data = request.stream.read()
    user = User()
    user.ParseFromString(data)
    print(len(data))
    print(user.name)
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

启动:python main.py


iOS

pod 'Protobuf'
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    User *name = [[User alloc] init];
    name.name = @"娃哈哈";
    name.age = 1;
    NSData *data = [name data];
    [self sendData:data];
    User *t = [User parseFromData:data error:nil];
    NSLog(@"%@",t.name);
}
-(void)sendData:(NSData *)data{
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://localhost:5000/proto"]];
    [request setHTTPBody:data];
    [request setHTTPMethod:@"POST"];
    
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSURLSessionTask *task = [session uploadTaskWithStreamedRequest:request];
    [task resume];
}

pod install

出错:
AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key'

解决方法:
proto版本对不上,要么升级pip , 要么升级pod的版本

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容