messagepack 这种结构简单又跨语言的好东东,今天写了个测试
用来测试iOS 到 python 服务器的代码
双方收发 图片 文字 数字 类型这几种常用的也基本够用了。
1. 发送数据到服务器 UIImage *image = [UIImage imageNamed: @"/tmp/000.png"]; NSData *imageData = UIImagePNGRepresentation(image); NSDictionary *dict = @{ @"name": @"test", @"id":@(123456), @"type":@(1), @"array": @[@(1.1f), @(2.1)], @"payload": imageData, }; NSError *error = nil; NSData *data = [MPMessagePackWriter writeObject:dict error:&error];
2. python 服务器收到数据 构件回复数据并回发 data_loaded = msgpack.unpackb(message) name = data_loaded.get("name") payload = data_loaded.get("payload") if data_loaded.get("type") == 1: print "find" f = open( "/tmp/t.png", "wb" ) f.write( payload ) f.close() else: print "not find" stu = { 'name': 'lili', 'age': 18, 'score': 100 } stu['payload'] = payload msg_str = msgpack.packb(stu, use_bin_type=False) # Reverse Message and send it back print 'sending back message: %s' % msg_str self.write_message(msg_str,binary=True)
3. ios 收到数据并解析 NSError * error; id obj = [MPMessagePackReader readData:message error:&error]; NSDictionary* revDic = (NSDictionary*)obj; NSLog(@"%@",revDic); NSData* data = [revDic objectForKey:@"payload"]; UIImage *image = [UIImage imageWithData:data]; NSString *filePath = @"/tmp/ssss.png"; NSString* name = [revDic objectForKey:@"name"]; NSNumber* iddd = [revDic objectForKey:@"age"]; NSInteger dd = [iddd integerValue]; NSLog(@"age:%ld name:%@", dd, name); // Save image. [UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];