原生socketio的问题..

查了一下,官方的c++部分socketio是0.9.16版本,为了兼容问题,在某贴下载了对应的js文件,在浏览器调试一切正常,但是一换回原生,原本发送的事件:
socket.emit(‘login’, { “nickname”:“111”});
到了服务端会变成:
{“name”:“login”,“args”:["{“nickname”:“111”}"]}
为什么要多封一层,是C++部分代码问题还是我使用问题?服务端是JAVA,已经换成0.9.16的服务端jar包了,浏览器是正常的。

看了一下C++代码,是SocketIOPacket::stringify方法序列化的时候把数据额外格式化了.但为什么要这样做呢…

我们在客户端封装了一个函数

function translateArgs(args) {
    if (cc.sys.isNative) {
        return JSON.parse(args);
    } else {
        return args;
    }
}

然后就没管了。

http://stackoverflow.com/questions/40392822/cocos-creator-with-socket-io-script
听说socket.io没法在iOS使用?我们没有试过,不知是否属实。
希望多多交流。

IOS我还没有测试,如果是的话,那就惨了…看来是有必要试下IOS版本的了,
这个问题我发现可能是args里面,把传入的参数当成字符串了,试着去修改代码,但是对rapidjson的用法不熟,而且cc好像还在上面封装多了一层,还在搞.

解决了,
SocketIO.cpp把writer.String(item.c_str());改成writer.RawValue(item.c_str(),item.length(),rapidjson::Type::kObjectType);
就不会在参数的外层再有一对双引,
不过这个也是看语言和服务端解析方法而论,如果服务端先接收string再解析json可能没问题,不需要改,如果服务端用Object直接接收对象,就会有问题.

我试过了,iOS是可以支持socket.io的,没有问题。
测试用的是iPod touch 5(iOS 8.3),能连接服务器,能收发消息。
所以至少没有特别明显的问题,算是能用的。

谢谢,我刚忙完,还没测试…那就没那么担心了