AsyncNetwork 1.1.1

AsyncNetwork 1.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2015年12月

Jonathan Diehl 维护。



  • 作者:
  • Jonathan Diehl

Async Network 是一个基于 AsyncSocket 的 COCOA 或 iOS 上进行套接字网络编程的框架。

快速入门

客户端-服务器网络

在客户端-服务器网络中,客户端连接到服务器以交换消息。在 AsyncNetwork 中,每个客户端将自动连接到具有相同服务名称的每个发现的服务器。服务器是通过 Bonjour 发现的。

在服务器进程中,创建一个 AsyncServer 实例,定义 Bonjour 服务名称,并启动服务器。

AsyncServer *server = [AsyncServer new];
server.serviceName = @"MyServer";
[server start];

在客户端进程中,创建一个 AsyncClient 实例,并启动它。它将自动连接到任何发现的服务器。

AsyncClient *client = [AsyncClient new];
[client start];

要接收消息,将代理分配给服务器和/或客户端,并实现 server:didReceiveCommand:object:

server.delegate = myController;

// in MyController.m
- (void)server:(AsyncServer *)theServer didReceiveCommand:(AsyncCommand)command object:(id)object {
    // respond to incoming messages here
}

要发送消息,在服务器和/或客户端上调用 sendCommand:object:。消息对象会通过 NSCoding 自动编码。

[client sendCommand:command object:message];

命令是一个 32 位数字,可用于标识发送的消息类型。

点对点网络

在点对点网络中,每个对等节点可以与网络中其他任何节点交换消息。要在 AsyncNetwork 上实现点对点网络,您可以使用 AsyncBroadcaster 或让每个对等节点实例化一个 AsyncServer 和一个 AsyncClient

使用 AsyncBroadcaster,消息可以发送到同一子网上的所有对等节点。广播器只能发送二进制数据 (NSData),并且不能保证数据按顺序到达。

AsyncBroadcaster *broadcaster = [AsyncBroadcaster new];
[broadcaster start];
[broadcaster broadcast:data];

如果您创建许多服务器和客户端以这种方式实现点对点网络,则可能从禁用客户端的自动连接功能中获益。这样,您只有在需要时才初始化网络连接,这对于实施基于请求的点对点网络计划特别有益。

基于请求的网络

在基于请求的网络中,服务器监听来自客户端的请求,并发送与原始请求相关联的响应。HTTP 服务器是以这种方式实现的。

要发送请求,请在客户端上调用 sendObject:responseHandler: 并提供将在服务器响应请求时调用的块。

[client sendCommand:command object:message responseHandler:^(id<NSCoding> response) {
    // react to the response here
}];

在服务器上,您必须实现代理方法 server:didReceiveCommand:object:connection:responseBlock:

- (void)server:(AsyncServer *)theServer didReceiveCommand:(AsyncCommand)command object:(id)object connection:(AsyncConnection *)connection responseBlock:(AsyncNetworkResponseBlock)block;
    id<NSCoding> yourResponse = ...;
    block(yourResponse);
}

如果您不想将连接长时间保持活跃,应使用AsyncRequest而不是AsyncClientAsyncRequest将连接到服务器,发送请求,接收响应,并在一次调用中断开连接。

[AsyncRequest fireRequestWithHost:@"192.168.0.1" port:12345 command:0 object:message responseBlock:^(id<NSCoding> response, NSError *error) {
    // react to the response here
}];

示例

示例位于Examples/文件夹中。在运行示例之前,请将AsyncNetwork作为共享框架安装。

广播器

广播器演示了使用AsyncBroadcaster在本地网络中将消息广播到多个接收者的用法。

客户端/服务器

客户端/服务器演示了如何设置AsyncClient和AsyncServer以自动相互连接并交换消息。您可以使用CMD-1创建更多服务器,使用CMD-2创建更多客户端。

移动客户端

移动客户端演示了如何在iOS中使用AsyncNetwork。它创建一个AsyncClient,该客户端专用于自动连接到从客户端/服务器示例创建的任何服务器。

请求

请求演示了如何使用AsyncRequests实现基于请求的网络。

通知

通知演示了从Ruby或Node服务器向iOS客户端发送广播。这可以用来作为本地通知来触发移动客户端上的更新。

安装

查看子模块(AsyncSocket)

git submodule init
git submodule update

编译AsyncNetwork(需要Xcode命令行工具)

run `make`

这将编译AsyncNetwork用于Mac和iOS。编译好的AsyncNetwork Framework可以直接导入到您的项目中

  1. AsyncNetwork.frameworkAsyncNetworkIOS.framework拖动到您的项目中
  2. 为主目标添加一个“拷贝文件”构建阶段
  3. 将目标改为“框架”
  4. 将包括的框架拖动到文件列表中

许可协议(MIT)

版权所有 (C) 2012 Jonathan Diehl。RWTH Aachen大学。

根据以下条件免费许可任何人获取此软件及其关联文档(该“软件”),在不限制的使用该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售该软件的副本,并允许提供该软件的个人为此目的而使用该软件的权利。

上述版权声明和本许可声明应包含在所有副本或主要部分的软件中。

该软件“按原样”提供,没有任何形式的保证,明示或暗示,包括但不限于适销性、特定用途适当性或非侵权性。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论基于合同、侵权或其他原因,或源于、因或与该软件或其使用或其它情况有关。