用于使用 WebSocket 或 长轮询 通过 Objective C 与 Socket.IO 通信的接口。最初基于 fpotter 的 socketio-cocoa,它还使用了其他库/类,例如
从版本 0.4 开始,此库至少需要 OS X 10.7 或 iOS 5.0。正因为如此,我们能够在 v0.5 中移除外部 JSON 框架,并且只依赖于 iOS 自身的 NSJSONSerialization
。
连接到你的 Socket.IO / node.js 服务器最简单的方式是
SocketIO *socketIO = [[SocketIO alloc] initWithDelegate:self];
[socketIO connectToHost:@"localhost" onPort:3000];
如果需要,可以在握手时包含额外的参数,方法是将一个 NSDictionary
添加到 withParams
选项中
[socketIO connectToHost:@"localhost"
onPort:3000
withParams:[NSDictionary dictionaryWithObjectsAndKeys:@"1234", @"auth_token", nil]
];
连接细节中也可以定义命名空间
[socketIO connectToHost:@"localhost" onPort:3000 withParams:nil withNamespace:@"/users"];
有几种方法可以向服务器发送数据
- (void) sendMessage:(NSString *)data;
- (void) sendMessage:(NSString *)data withAcknowledge:(SocketIOCallback)function;
- (void) sendJSON:(NSDictionary *)data;
- (void) sendJSON:(NSDictionary *)data withAcknowledge:(SocketIOCallback)function;
- (void) sendEvent:(NSString *)eventName withData:(NSDictionary *)data;
- (void) sendEvent:(NSString *)eventName withData:(NSDictionary *)data andAcknowledge:(SocketIOCallback)function;
因此,你可以发送以下这样的普通消息
[socketIO sendMessage:@"hello world"];
或者一个包含一些数据的 Event(事件)
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"test1" forKey:@"key1"];
[dict setObject:@"test2" forKey:@"key2"];
[socketIO sendEvent:@"welcome" withData:dict];
如果你想让服务器对您的 Message/Event 进行确认,您也可以传递一个 SocketIOCallback 块
SocketIOCallback cb = ^(id argsData) {
NSDictionary *response = argsData;
// do something with response
};
[socketIO sendEvent:@"welcomeAck" withData:dict andAcknowledge:cb];
所有代理方法都是可选的 - 你可以实现以下内容
- (void) socketIODidConnect:(SocketIO *)socket;
- (void) socketIODidDisconnect:(SocketIO *)socket disconnectedWithError:(NSError *)error;
- (void) socketIO:(SocketIO *)socket didReceiveMessage:(SocketIOPacket *)packet;
- (void) socketIO:(SocketIO *)socket didReceiveJSON:(SocketIOPacket *)packet;
- (void) socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet;
- (void) socketIO:(SocketIO *)socket didSendMessage:(SocketIOPacket *)packet;
- (void) socketIO:(SocketIO *)socket onError:(NSError *)error;
要处理一个传入的 message
或 event
,只需
// message delegate
- (void) socketIO:(SocketIO *)socket didReceiveMessage:(SocketIOPacket *)packet
{
NSLog(@"didReceiveMessage >>> data: %@", packet.data);
}
// event delegate
- (void) socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet
{
NSLog(@"didReceiveEvent >>> data: %@", packet.data);
}
在 OS X 上运行 socket.io-objc 库需要一些小的修改
你必须使用 SocketRocket.framework 而不是普通的子模块来为 OSX 使用
查看: SocketRocket 的安装 OS X
(这种方法是我取得的最佳效果,并且我不需要添加“复制文件”的东西)
当使用 osx-framework,你必须修复 SocketIOTransportWebsocket.h 中的导入声明
// replace
#import SRWebSocket.h
// with
#import <SocketRocket/SRWebSocket.h>
初始项目由 Philipp Kyeck http://beta-interactive.de。
以下这些 出众的人士 提供了额外支持。
(MIT 许可证)
版权所有 (c) 2011-14 Philipp Kyeck http://beta-interactive.de
在此特此授予任何人获得本软件及其相关文档文件(以下简称“软件”)副本的权利,免费使用本软件,不受限制,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或销售软件副本的权利,以及准许向本软件提供之人行使上述权利,但前提是必须遵守以下条件
上述版权声明和本许可通知应包含在软件的所有副本或实质性部分的软件中。
软件按照“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、适用于特定目的和不受侵权的保证。在任何情况下,作者或版权持有者不对任何索赔、损害或其它责任承担责任,无论基于合同、侵权或其它任何性质,源于、产生于或与该软件或使用或其它在软件中使用有关。