使用socket.io-client-swift遇到发送不了数据

2017-06-28  本文已影响273人  独孤流

sockiet.io-client-swift


双方用手机打电话,明明手机都通了,可是就是双方都说听不见对方

这一问题折磨了我那负责这一块的同事好多天后他都没解决,然后就尝试着让我解决,我接受后看了一个晚上也没什么进展,最后通过在同事的帮组下使用tcp-flowtcp-flow抓包发送的数据,发现ping的心跳包能正常发送,但一旦发送请求的业务数据就只是在log区里显示发送成功,但实际拦截的数据却是只发送了一个状态码4,看到这里,我当时冒出了想法,既然能发送状态码,我固定发送些其他信息看看能不能发送,经过一番艰辛的努力,发现自己写的固定内容是能发送的,而一旦换成这个库自己生成的内容后就又只有状态码了,然后在写固定发送内容时后端的同事告诉我发送的内容还差一个namespace,再跟据这个情况最后发现了是这个库如果使用者没有手动设置namespace就会有一个默认的空namespace,然后由于兼容做的不好,导致发送的数据在解析成data时就解析没了,问题找到,然后按下面方式把问题解决

NSURL *url = [NSURL URLWithString:@"http://192.168.99.221:8000/socket.io/"];
SocketIOClient *socket = [[SocketIOClient alloc] initWithSocketURL:url config:@{@"log": @YES,@"forcePolling":@YES,@"forceWebsockets":@YES}];
socket.nsp = @"/socket.io/" 
[socket connect];
[socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) {
        NSLog(@"socket connected");
        [socket emit:@"sub" with:@[@"业务数据"]];
}];
[socket on:@"sub" callback:^(NSArray* data, SocketAckEmitter* ack) {
id obj = data.firstObject;
            NSData *jsonData = [obj dataUsingEncoding:NSUTF8StringEncoding];
            NSError *err;
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                                options:NSJSONReadingMutableContainers
                                                                error:&err];
            NSLog(@"%@",dic);
 }];

这次解决问题的收获蛮多,

上一篇下一篇

猜你喜欢

热点阅读