MDWamp 2.2.4

MDWamp 2.2.4

测试已测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布最后发布2016年2月

mogui维护。



 
依赖项
CocoaAsyncSocket>= 0
MPMessagePack>= 0
SocketRocket>= 0
 

MDWamp 2.2.4

  • 作者:
  • Niko Usai

开发 master

这是什么?

MDWamp 是 WebSocket 子协议 WAMP (v2) 的客户端 Objective-C 实现。

使用此库以及 WAMP 协议的服务器实现,您可以使实时通知不仅适用于 Web 应用(如 WebSocket 所创建的那样),而且还适用于您的移动应用,就像内置的 Apple Push 通知服务一样,避免从服务器获取新内容的繁琐的长轮询请求。

WAMP 由其创始人所说的是:

WAMP 是一个开放的 WebSocket 子协议,它提供两种应用消息模式:远程过程调用 + 发布 & 订阅。
使用 WAMP,您可以使用解耦的应用组件构建分布式系统,这些组件以(软)实时通信。

它使用了知名且维护良好的库来处理低级连接: SocketRocketCocoaAsyncSocket

安装

OSX

  • 使用 CocoaPods,只需将其添加到 Podfile 中:
    pod 'MDWamp'

  • 使用 MDWamp.framework
    构建项目的框架目标,只需确保运行 git submodule init && git submodule update 获取依赖项即可

iOS

演示应用

Xcode 项自有 MDWampDemo 目标,这是一个 iOS 应用程序,您可以在其中运行(更适合在两个或更多设备/模拟器上运行)并探索。
它期望一个在本地计算机上运行的 crossbar.io 服务器,配置文件位于演示文件夹中。
尽快在 demo 目录下运行 crossbar start

通过查看应用程序的简单代码,您可以了解库的示例用法,并品尝 WAMP 协议的功能。

API

MDWamp 由一个主类 MDWamp 组成,执行所有工作,它连接到服务器并公开方法以向主题发送事件并从主题接收事件,以及调用远程过程。

要实例化它,您必须指定一个传输方式(因为WAMP可以支持不同的传输方式)并根据您要连接的服务器来指定。

目前实现了两种传输方式:WebSocket原始套接字

请注意,对象MDWamp必须是一个持久属性或ARC会在创建之前销毁它。

首先,您必须选择一个传输方式(例如,WebSocket)并用它初始化MDWamp对象。

MDWampTransportWebSocket *websocket = [[MDWampTransportWebSocket alloc] initWithServer:[NSURL URLWithString:@"ws://:8080/ws"] protocolVersions:@[kMDWampProtocolWamp2msgpack, kMDWampProtocolWamp2json]];   

_wamp = [[MDWamp alloc] initWithTransport:websocket realm:@"realm1" delegate:self];

您完成并想要建立连接时。

[wamp connect];

要断开连接。

[wamp disconnect];

您可以在初始化MDWamp时设置委托来实现两种方法。

// Called when client has connected to the server
- (void) mdwamp:(MDWamp*)wamp sessionEstablished:(NSDictionary*)info;

// Called when client disconnect from the server
- (void) mdwamp:(MDWamp *)wamp closedSession:(NSInteger)code reason:(NSString*)reason details:(NSDictionary *)details;

您也可以提供类似的回调而不是使用委托。

@property (nonatomic, copy) void (^onSessionEstablished)(MDWamp *client, NSDictionary *info);
@property (nonatomic, copy) void (^onSessionClosed)(MDWamp *client, NSInteger code, NSString *reason, NSDictionary *details);

MDWamp类及其委托的头文件都注释详尽,因此API非常简单。无论如何,这里有一些常见用法的示例。

调用远程过程

[wamp call:@"com.hello.hello" args:nil kwArgs:nil complete:^(MDWampResult *result, NSError *error) {
    if (error== nil) {
        // do something with result object
    } else {
        // handle the error
    }
}];

向主题发布此JSON对象{"user" : ["foo", "bar"]}

[_wamp publishTo:@"com.topic.hello" args:nil kw:@{@"user":@[@"foo", @"bar"]} options:@{@"acknowledge":@YES, @"exclude_me":@NO} result:^(NSError *error) {

    // if acknowledge is TRUE this callback will be called to notify the successful publishing
    NSLog(@"published? %@", (error==nil)?@"YES":@"NO");
}];

订阅主题并处理接收的事件

[wamp subscribe:@"com.topic.hello" onEvent:^(MDWampEvent *payload) {

    // do something with the payload of the event
    NSLog(@"received an event %@", payload.arguments);

} result:^(NSError *error) {
    NSLog(@"subscribe ok? %@", (error==nil)?@"YES":@"NO");
}];

测试

如果要运行测试,您必须使用子模块安装依赖项,因此

  • 克隆仓库: git clone [email protected]:mogui/MDWamp.git
  • cd MDWamp
  • 在克隆的MDWamp目录内运行git submodule init && git submodule update以初始化SocketRocket和msgpack-objectivec依赖项。

应该可以立即构建。

您可以运行针对MDWamp目标的单元测试而无需任何其他依赖项,但是对MDWampTransportWebSocket的测试将不会运行。

如果要运行完整的测试套件(包括代码覆盖率),请在MDWamp+crossbar.io+covarege目标上运行测试。

要这样做,您需要安装crossbar.io的一个实例并启动它,保留所有默认设置即可

pip install crossbar[msgpack]
crossbar init
crossbar start

享受吧:)

变更

2.2.0

实现了高级协议的稳定功能

  • 传输
    • 原始套接字传输(旧规范 - 将被更新)
    • 长轮询传输(在移动设备上没有意义)
  • 发布和订阅
    • 订阅者黑白名单
    • 发布者排除
    • 发布者标识
  • 远程过程调用
    • 调用者标识
    • 渐进式调用结果
    • 取消调用
  • 认证
    • 基于TLS证书的认证(SocketRocket)
    • WAMP挑战-响应认证
    • 一次性令牌认证

2.1.0

  • 添加了RawSocketTransport
  • 添加了iOS测试应用程序目标
  • 删除了mdwamp版本1的相关代码
  • 重构了一些代码库的部分,不再处理版本1/2的差异

2.0.0

  • 采用了WAMP v2 基本协议
  • 由于协议更改,引入了新的库接口
  • 解耦架构,以便在新传输和序列化方面提供灵活性
  • 已放弃iOS 5兼容性,现在需要iOS >= 6.1
  • 尚未支持与WAMP v1的向后兼容性

1.1.0

  • 添加了OSX框架目标
  • 已放弃iOS 4兼容性,现在需要iOS >= 5.0
  • 添加了对连接、RPC和pub/sub消息的块回调
  • 删除了RPC和事件委托(现在它们只与块一起工作)
  • 添加了单元测试

路线图

  • 在项目中创建一个iOS App目标以展示所有功能
  • 实现原始套接字传输
  • 实现高级协议规范
  • 使库也成为与GCDWebServer集成的服务器库

作者

版权

版权所有 © 2012 Niko Usai。有关详细信息,请参阅LICENSE。
WAMP是Tavendo GmbH的商标。