shanty 0.0.1

shanty 0.0.1

测试测试
语言语言 Obj-CObjective C
许可证 BSD 2.0
发布最新版2014年12月

未申明 维护。



shanty 0.0.1

  • Jonathan Wight

Shanty

什么是 Shanty?

哦伙伴喜欢威士忌,船长喜欢朗姆酒

[一首歌] 最初是由水手们在共同进行体力劳动时演唱的。

Shanty 是一种简单的网络协议,允许软件以最少的工作量进行通信。Shanty 为即插即用提供了足够的功能。您应该能够用很少的代码编写服务器和客户端代码。

Shanty 还是一系列实现 Shanty 协议的源代码。当前的 Shanty 实现包括 Objective-C(用于 iOS 和 Mac OS X)和 Python。

Shanty 还支持基于 Bonjour DNS-SD 的服务发现和发布。因为 Shanty 对 Bonjour 做了合理的默认推断,所以它能够在不进行任何配置的情况下广告和发现其他 Shanty 服务。

Shanty 不是什么。

Shanty 不是为性能设计的。它可能不适合视频游戏或需要流式传输数据的应用程序。

Shanty 也不是为消息的强优先级设计。消息在网络中以发送的顺序传输。没有重要消息比其他消息优先的概念。类似地,消息以整体单位传输,较大的消息将“阻塞”较小的消息。

如何使用 Shanty?

然后那些鲸鱼摧毁了我们的船只

示例 1:创建并启动服务器

此示例创建了一个服务器并开始监听连接。它还隐式地使用默认服务名称和类型通过 Bonjour 广告了服务器。服务类型自动从应用程序的捆绑标识符生成。您可以覆盖这些默认值,如果您希望这样做的话。

注意,服务器正在托管的服务器端口是由操作系统随机生成的。这对于使用 Bonjour 广告其地址的服务器来说是完全可以接受的。但如果你需要使用你的端口号,你也可以那样做。

self.server = [[STYServer alloc] init];

[self.server startListening:^(NSError *error) {
    /* Handle errors here. */
    }];

示例 2:为服务器编写默认的消息处理程序。

通常在启动服务器之前,您需要预先配置一系列默认的消息处理器。

STYMessageBlock theHandler = ^(STYPeer *inPeer, STYMessage *inMessage, NSError **outError) {
    /* Handle the message here */
    return(YES);
    }
[self.server.messageHandler addCommand:@"example" handler:theHandler];

示例 3:发送消息。

发送消息通常是一个创建和配置 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. */
    }];

示例 4:发送消息并处理回复。

待办事项

示例 5:发现并连接到服务器

服务发现器用于发现其他正在运行的 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

元数据部分

待办事项

数据部分

待办事项

消息 ID

待办事项

消息流

待办事项

client sends first 'hello'
server sends 'hello.response'

标准消息

待办事项

standard cmd types:
    hello
    hello.response
    echo
    echo.response
    ping
    ping.response

Shanty 设计决策

待办事项:无版本控制待办事项:无压缩待办事项:无安全机制。

关于安全怎么办?

待办事项

那为什么不在这里使用[其他技术]呢?

HTTP

待办事项

SPDY

待办事项

WebSockets

待办事项

BEEP

待办事项

这个名字的由来是什么?

待办事项

我们即将离开,现在欢呼吧,小子们,我们返回家园