测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | BSD |
发布时间最新发布 | 2016年10月 |
由 Nevyn Bengtsson,Nevyn Bengtsson 维护。
由 Nevyn Joachim Bengtsson [email protected],2011-12-28 发布
我喜欢从 plist/json-safe 字典中构建简单的网络协议,并以尽可能少的边界将它们作为 JSON 在套接字上传输。易于原型设计,易于调试。给 Cerfing 一个 AsyncSocket,它
它还可以
使用 Cerfing 发送请求更新服务器 MOTD 的示例
[_conn requestDict:@{
@"command": @"setMessage", // the command is 'setMessage'
@"contents": msg // Send 'msg' as the new message to set.
} response:^(NSDictionary *response) {
// The server has replied.
if([response[@"success"] boolValue])
NSLog(@"Successfully updated message!");
else
NSLog(@"Couldn't set message, because %@", [response objectForKey:@"reason"]);
}];
在接收方
-(void)request:(CerfingConnection*)conn setMessage:(NSDictionary*)dict responder:(CerfingResponseCallback)respond;
{
NSString *newMessage = dict[@"contents"];
if([newMessage rangeOfString:@"noob"].location != NSNotFound) {
respond(@{
@"success": @NO,
@"reason": @"you should be kind!"
});
} else {
_message = newMessage;
respond(@{
@"success": @YES
});
}
}
注意在响应中,要调用的方法的选择器(request:setMessage:responder:)是基于传入的字典推导出来的。
正如您所看到的,最终的协议类型非常弱。理论上,这意味着您可能会犯拼写错误,并且不明白为什么您的网络似乎出现了问题;实际上,我从未遇到过这种情况。
要在项目中使用 Cerfing 与 AsyncSocket,请添加以下文件:
Cerfing 以前是一个单一的文件。这很好。然而,我希望能够跨多个不同的传输使用相同的协议。为了开始,我非常希望能够在一个游戏引擎中使用 UDP,但我不想破坏 Cerfing 连接到 TCP 上的其他用法。我想到的最直观的设计(尽管不是非常优雅)是在 Cerfing 和套接字之间添加一层——因此,有了传输层。向设计中添加层通常是一个反模式(尤其是当它只是一个添加很少抽象的绑定层时)。如果您有更好的设计,请告诉我。
如果您希望尽可能地使 Cerfing 成为单个类,git 标记 "1.0.0" 是稳定的且易于使用,而 "1.1.0" 是保留此 API 的最后一个 1.x 发行版。
此项目最初名为TCAHP,或TCAsyncHashProtocol,这个名字很糟糕,发音也难以发音。当然,网络库是异步的;在ObjC中,“hash”并不是指“字典”;好吧,它确实是一个协议。
"Cerfing"是对Vint Cerf的致敬,他是我们所知道的互联网的原始创造者之一。通过“cerfing”,你可以快速组合网络协议,而不必过多地考虑实现细节。