iOS 中的 Sailsjs SocketIO

Posted

技术标签:

【中文标题】iOS 中的 Sailsjs SocketIO【英文标题】:Sailsjs SocketIO in iOS 【发布时间】:2014-07-17 01:36:06 【问题描述】:

我很难将我的想法集中在我正在尝试做的基于套接字的聊天应用程序上。我正在为我的服务器端框架使用sailsjs,并尝试使用SocketIO-Obj 在ios 中创建一个基于聊天的应用程序!

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

【问题讨论】:

你用的是什么版本的风帆? 【参考方案1】:

假设你使用的是最新版本的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

请注意,如果您使用的是sails 0.9.x 或更低版本,则协议会略有不同。另请注意,由于 Sails 还不稳定(不是 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);
];

【讨论】:

所以我昨晚试过了,我明白你所说的关于sails 解释它的意思,但是使用你的例子来调用什么也没做:-( 您使用的是哪个版本的风帆? 最新的……其实是 0.10.0-rc7 我已将代码更新为带有确认(回调函数)。再检查一遍。日志中有什么内容吗? 我得尽快试试

以上是关于iOS 中的 Sailsjs SocketIO的主要内容,如果未能解决你的问题,请参考以下文章

SailsJS - 将sails.io.js 与JWT 一起使用

SailsJS/MySQL:“字段列表”中的未知列“NaN”

SailsJS 1.0:Mongo 中模型的 .create() 错误,单向关联到存储在 MySQL 中的模型

SailsJS 是在视图中显示所有 mongodb 集合的最佳方式

SailsJs websocket与自定义路线而不是蓝图?

SailsJS / Waterline ORM:仅使用一个查询更新多个条目