哦伙伴喜欢威士忌,船长喜欢朗姆酒
[一首歌] 最初是由水手们在共同进行体力劳动时演唱的。
Shanty 是一种简单的网络协议,允许软件以最少的工作量进行通信。Shanty 为即插即用提供了足够的功能。您应该能够用很少的代码编写服务器和客户端代码。
Shanty 还是一系列实现 Shanty 协议的源代码。当前的 Shanty 实现包括 Objective-C(用于 iOS 和 Mac OS X)和 Python。
Shanty 还支持基于 Bonjour DNS-SD 的服务发现和发布。因为 Shanty 对 Bonjour 做了合理的默认推断,所以它能够在不进行任何配置的情况下广告和发现其他 Shanty 服务。
Shanty 不是为性能设计的。它可能不适合视频游戏或需要流式传输数据的应用程序。
Shanty 也不是为消息的强优先级设计。消息在网络中以发送的顺序传输。没有重要消息比其他消息优先的概念。类似地,消息以整体单位传输,较大的消息将“阻塞”较小的消息。
然后那些鲸鱼摧毁了我们的船只
此示例创建了一个服务器并开始监听连接。它还隐式地使用默认服务名称和类型通过 Bonjour 广告了服务器。服务类型自动从应用程序的捆绑标识符生成。您可以覆盖这些默认值,如果您希望这样做的话。
注意,服务器正在托管的服务器端口是由操作系统随机生成的。这对于使用 Bonjour 广告其地址的服务器来说是完全可以接受的。但如果你需要使用你的端口号,你也可以那样做。
self.server = [[STYServer alloc] init];
[self.server startListening:^(NSError *error) {
/* Handle errors here. */
}];
通常在启动服务器之前,您需要预先配置一系列默认的消息处理器。
STYMessageBlock theHandler = ^(STYPeer *inPeer, STYMessage *inMessage, NSError **outError) {
/* Handle the message here */
return(YES);
}
[self.server.messageHandler addCommand:@"example" handler:theHandler];
发送消息通常是一个创建和配置 STYMessage,然后告诉 STYPeer 发送的过程。
NSData *theMessageData = UIImagePNGRepresentation(theExampleImage);
NSDictionary *theMetadata = @{ @"Content-Type": @"image/png" };
STYMessage *theMessage = [[STYMessage alloc] initWithCommand:@"my-command" metadata:theMetadata data:theMessageData];
[thePeer sendMessage:theMessage completion:^(NSError *error) {
/* Handle errors here. */
}];
待办事项
服务发现器用于发现其他正在运行的 Shanty 服务器(通过 Bonjour 宣传)并可选择连接到它们。
self.discoverer = [[STYServiceDiscoverer alloc] init];
[self.discoverer connectToService:theSelectedService openPeer:YES completion:^(STYMessagingPeer *peer, NSError *error) {
/* You've connected now do something interesting! */
}];
我们将船向西南方航行,小子们,我们将船驶向,我们的探测深度;所以我们绕航,做了探测,钻到了四十五个阿拉伯长度;我们放了主帆和主索具,转入航道。
Shanty 是一种消息封装方案,以及结构化消息的定义。每条消息都包含消息头、控制数据、元数据和原始数据。
[2 octets] control data length (network endianess)
[2 octets] metadata length (network endianess)
[4 octets] data length (network endianess)
[0...65535 octets] control data (JSON)
[0...65535 octets] metadata (JSON)
[0...4294967295 octets] data (binary)
待办事项
standard control data fields:
cmd
msgid
in-reply-to
more-coming
待办事项
待办事项
待办事项
待办事项
client sends first 'hello'
server sends 'hello.response'
待办事项
standard cmd types:
hello
hello.response
echo
echo.response
ping
ping.response
待办事项:无版本控制待办事项:无压缩待办事项:无安全机制。
待办事项
待办事项
待办事项
待办事项
待办事项
我们即将离开,现在欢呼吧,小子们,我们返回家园