AnyMesh 是一个多平台、去中心化、自动发现、自动连接的 mesh 网络 API。
当前支持的平台
AnyMesh 使得在任意局域网(LAN)上构建去中心化的多平台 mesh 网络变得简单,无需手动实现 TCP/UDP 过程。
所有支持的平台工作方式大致相同。每个 AnyMesh 实例需要配置以下两个属性
AnyMesh 将自动发现并连接到其他 AnyMesh 实例。
然后,为了在网络上进行通信,实例可以发送两种类型的消息
这就是全部了!
答:AnyMesh 是一种方便而强大的方式,可以使多个程序相互连接并交换信息。每个 AnyMesh 实例将自动查找并连接到其他实例。AnyMesh 实例可以在同一应用内运行,在不同的同一设备上的应用中运行,或者在同一本地网络(LAN)中的不同设备上运行。
网络的组合可以是这些关系的任何组合,跨任何语言或平台 - 您可能有 Mac OSX 桌面电脑上运行着的 2 个 AnyMesh-Python 实例,还有 1 个 AnyMesh-Node 实例。这些实例还连接到同一走廊 Linux 电脑上的 2 个 AnyMesh-Node 实例,以及一个连接到路由器中的 Raspberry Pi 上运行的 AnyMesh-Python 实例。在您的 iPhone 上启动使用 AnyMesh-iOS 的应用,立即自动连接到所有这些设备!
答:AnyMesh 当然不是第一个 mesh 网络 API。但 AnyMesh 是本着一些独特的目的创建的,这使得它区别于其他库
A: AnyMesh还处于一个非常年轻的阶段,尽管它功能完整,但要在所有支持平台上达到v.1.0,还需要一段时间。请参阅 CONTRIBUTE.md 文件以获取关于如何为开发做出贡献的建议。
2014年11月4日 - 已发布0.4.0版本!请查看CHANGELOG以获取详细信息。
或者,要在带有单元测试的示例XCode项目中快速开始,只需在终端中输入以下内容:
pod try AnyMesh
一旦将AnyMesh下载/导入到项目中
或者,要在带有单元测试的示例XCode项目中快速开始,只需在终端中输入以下内容:
pod try AnyMesh
一旦将AnyMesh下载/导入到项目中
创建/访问一个AnyMesh实例
AnyMesh *am = [[AnyMesh alloc] init];
am.delegate = self;
启用连接性
[am connectWithName:@"Dave" subscriptions:@[@"events", @"updates"]];
发送请求
[am requestToTarget:@"Bob" withData:@{@"msg":@"Hi Bob!"}];
向订阅者发布
[am publishToTarget:@"events" withData:@{@"priority":@1, @"alert":"attention!"}];
处理收到的消息
-(void)anyMesh:(AnyMesh*)anyMesh receivedMessage:(MeshMessage *)message {
//react to message
}
更改你网络的ID(在连接之前做此操作!)
am = [[AnyMesh alloc] init];
am.networkID = "upstairsDevices";
am.delegate = ...
[am connectWith....
AnyMesh实例将只连接到具有相同网络ID的其他实例。通过显式设置ID,你可以在同一LAN上拥有多个“Mesh”,并决定哪些实例属于哪个mesh。AnyMesh平台上的默认网络ID是“anymesh”。
更改AnyMesh使用的UDP端口(同样在连接之前做此操作!)
am = [[AnyMesh alloc] init];
am.discoveryPort = 54321;
am.delegate = ...
这是控制哪些实例可以找到彼此的另一种方法,但如果AnyMesh的默认端口(12345)已经在你的网络上被使用,这也可能很有用。
获取MeshDeviceInfo对象数组
NSArray *activeConnections = [am getConnections];
根据需要暂停和恢复操作
[am suspend]; //put these in your Application Delegate where appropriate.
[am resume];
更新实例的订阅
[am updateSubscriptions:@[@"events", @"updates", @"mobile"]];
更多可选方法供你的委托实现
//use these if your program wants to track information on connected instances:
-(void)anyMesh:(AnyMesh*)anyMesh connectedTo:(MeshDeviceInfo *)device
-(void)anyMesh:(AnyMesh*)anyMesh disconnectedFrom:(NSString *)name
//if your program is keeping track of subscriptions for each connected instance, you may want to use this:
-(void)anyMesh:(AnyMesh *)anyMesh updatedSubscriptions:(NSArray *)subscriptions forName:(NSString *)name;
Dave Paul [email protected]