iOS中的Sailsjs SocketIO

时间:2014-05-28 00:55:28

标签: ios objective-c node.js socket.io sails.js

我很难将自己的思维包裹在我尝试做的基于套接字的聊天应用中。我在服务器端框架中使用sailsjs并尝试使用SocketIO-Obj在iOS中创建基于聊天的应用程序!

我与sailsjs框架成功握手,sailsjs config / sockets.js文件中的onConnect方法运行。但是在它打开之后如何路由到我创建的控制器和操作,并且仍然能够访问请求套接字并将它们订阅到我的模型

1 个答案:

答案 0 :(得分:2)

假设您使用最新版本的sails(0.10.0及更高版本),那么sails在socket.io上使用的协议不公开,但您可以在the part how it's madeand how it is interpreted上阅读来源

基本上它会发出一个事件,http动词作为事件名称和对象方法,数据,URL和标题。 Javascript中有这样的东西:

var request = {
  data: data,
  url: url,
  headers: headers
};
socket.emit(method, request, callback);
  • method必须类似'head''get''post'等。
  • data应该是发送请求正文的对象。可选的。
  • url必须是不带尾部斜杠或空格的字符串,例如'/buy-a-cat''/cat/1/pat'
  • headers应该是一个对象,标题名称和值的映射。标题名称较低。像{ accept: '*/*' }一样。可选的。

我不太了解Objective-C并且没有测试过这段代码,但我认为你可以做这样的事情:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"/cats" forKey:@"url"];

SocketIOCallback cb = ^(id argsData) {
    NSDictionary *response = argsData;
    // do something with response
};

[socketIO sendEvent:@"get" withData:dict andAcknowledge:cb];

在http请求表示法中,它等于:GET /cats

请注意,如果您使用的风帆为0.9.x或更低,则协议略有不同。另请注意,由于风帆尚未稳定(不是1.x.x),因此可能会再次发生变化,因为这在任何地方都没有记录。

我还找到了project making sails http calls with SocketIO-Obj。它看起来使用0.9.x协议,但应与1.x.x兼容。

看起来你可以用它来做到这一点:

#import "SocketIO+SailsIO.h"


_socket = [[SocketIO alloc] initWithDelegate:self];
    [_socket connectToHost:@"localhost" onPort:1337];    

[_socket get:@"/user" withData:nil callback:^(id response) {
        NSLog(@"Records: %@", response);
}];
相关问题