AnyMesh 0.4.0

AnyMesh 0.4.0

测试已测试
语言编程语言 Obj-CObjective C
许可证 MIT
发布最后更新2014年12月

Dave Paul 维护。



AnyMesh 0.4.0

  • Dave Paul

https://github.com/AnyMesh

AnyMesh 是一个多平台、去中心化、自动发现、自动连接的 mesh 网络 API。

当前支持的平台

  • Node.js
  • iOS
  • Python

AnyMesh 使得在任意局域网(LAN)上构建去中心化的多平台 mesh 网络变得简单,无需手动实现 TCP/UDP 过程。

所有支持的平台工作方式大致相同。每个 AnyMesh 实例需要配置以下两个属性

  • 名称 - 实例的名称或标识符
  • 订阅 - 实例要监听的单词数组

AnyMesh 将自动发现并连接到其他 AnyMesh 实例。

然后,为了在网络上进行通信,实例可以发送两种类型的消息

  • 请求 - 向特定的设备名称发送消息。
  • 发布 - 发送与关键字相关联的消息。任何订阅该关键字的实例都将接收到消息。

这就是全部了!

常见问题解答(FAQ)

问:所以 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 而不是 RabbitMQ、0MQ 等?

答:AnyMesh 当然不是第一个 mesh 网络 API。但 AnyMesh 是本着一些独特的目的创建的,这使得它区别于其他库

  • AnyMesh 实际上是去中心化的 - 即使在 TCP 连接的最低级别,也没有任何设备作为服务器或中继器。所有 AnyMesh 实例都管理自己与其他设备的连接。这意味着任何设备可以随时加入或退出网络,而不会对其他连接造成任何中断。
  • AnyMesh的设置和配置极其简单 —— 只需命名你的实例,并可选地给它一些订阅的关键词。无需为实例定义角色 —— 每个实例都使用相同简单的消息分发模式。
  • AnyMesh支持多平台 —— 目前我们支持iOS、Python和Node。我们希望很快开始Java/Android的开发。

Q: 我能如何帮助?

A: AnyMesh还处于一个非常年轻的阶段,尽管它功能完整,但要在所有支持平台上达到v.1.0,还需要一段时间。请参阅 CONTRIBUTE.md 文件以获取关于如何为开发做出贡献的建议。

AnyMesh iOS

请阅读

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;

AnyMesh软件使用MIT许可证授权

如有任何问题、评论或建议,请联系作者

Dave Paul [email protected]