我很难将自己的思维包裹在我尝试做的基于套接字的聊天应用中。我在服务器端框架中使用sailsjs并尝试使用SocketIO-Obj在iOS中创建基于聊天的应用程序!
我与sailsjs框架成功握手,sailsjs config / sockets.js文件中的onConnect方法运行。但是在它打开之后如何路由到我创建的控制器和操作,并且仍然能够访问请求套接字并将它们订阅到我的模型
答案 0 :(得分:2)
假设您使用最新版本的sails(0.10.0及更高版本),那么sails在socket.io上使用的协议不公开,但您可以在the part how it's made,and 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);
}];