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
而不是AsyncClient
。AsyncRequest
将连接到服务器,发送请求,接收响应,并在一次调用中断开连接。
[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可以直接导入到您的项目中
AsyncNetwork.framework
或AsyncNetworkIOS.framework
拖动到您的项目中版权所有 (C) 2012 Jonathan Diehl。RWTH Aachen大学。
根据以下条件免费许可任何人获取此软件及其关联文档(该“软件”),在不限制的使用该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售该软件的副本,并允许提供该软件的个人为此目的而使用该软件的权利。
上述版权声明和本许可声明应包含在所有副本或主要部分的软件中。
该软件“按原样”提供,没有任何形式的保证,明示或暗示,包括但不限于适销性、特定用途适当性或非侵权性。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论基于合同、侵权或其他原因,或源于、因或与该软件或其使用或其它情况有关。