测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可证 | Apache 2 |
发布最后发布 | 2016年2月 |
由mogui维护。
依赖项 | |
CocoaAsyncSocket | >= 0 |
MPMessagePack | >= 0 |
SocketRocket | >= 0 |
开发 master
MDWamp 是 WebSocket 子协议 WAMP (v2) 的客户端 Objective-C 实现。
使用此库以及 WAMP 协议的服务器实现,您可以使实时通知不仅适用于 Web 应用(如 WebSocket 所创建的那样),而且还适用于您的移动应用,就像内置的 Apple Push 通知服务一样,避免从服务器获取新内容的繁琐的长轮询请求。
WAMP 由其创始人所说的是:
WAMP 是一个开放的 WebSocket 子协议,它提供两种应用消息模式:远程过程调用 + 发布 & 订阅。
使用 WAMP,您可以使用解耦的应用组件构建分布式系统,这些组件以(软)实时通信。
它使用了知名且维护良好的库来处理低级连接: SocketRocket 和 CocoaAsyncSocket。
使用 CocoaPods,只需将其添加到 Podfile 中:
pod 'MDWamp'
使用 MDWamp.framework
构建项目的框架目标,只需确保运行 git submodule init && git submodule update
获取依赖项即可
Xcode 项自有 MDWampDemo
目标,这是一个 iOS 应用程序,您可以在其中运行(更适合在两个或更多设备/模拟器上运行)并探索。
它期望一个在本地计算机上运行的 crossbar.io 服务器,配置文件位于演示文件夹中。
尽快在 demo
目录下运行 crossbar start
。
通过查看应用程序的简单代码,您可以了解库的示例用法,并品尝 WAMP 协议的功能。
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
}
}];
{"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
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
享受吧:)
实现了高级协议的稳定功能
版权所有 © 2012 Niko Usai。有关详细信息,请参阅LICENSE。
WAMP是Tavendo GmbH的商标。