一个 websocket的wss的问题

针对各种引擎的多年踩坑经验,网络部分我的建议是:靠自己!

5赞

你用的是socket.io 我这边服务端是skynet 没有兼容组件啊 总不能做个nodejs代理
大神有啥好建议? @1111178

最快的办法,就是做一个NODEJS代理服务器。

原生的用websocket感觉问题不少,web上用还不错。

嘿嘿,网友写的。

@dumganhar

还真的没有试过ios,开发到现在都是在android上测试的,这个必需关注一下

这个正在修,今天可以发个patch出来。

1赞

正在修。。。

1赞

还有个情况,就是正在游戏中时,主动断开了wifi,再连接上wifi时,把游戏重启后,估计好几分钟都连不上服务器,ios上偶尔出现这个情况,android上没有发现,我在ios端第三方工具去ping我的服务器也ping不通(确定服务器正常),感觉像是ios自动把这个服务器地址垃成黑名单了,过了几分钟后就好了

游戏重启是指杀死游戏进程重新启动,还是 在游戏内自己切换到游戏首页面重新进游戏主场景?

因为断网了,我就回到游戏大厅了,连接上wifi后,想进子游戏,但进不去(也是连接不上),然后我就把游戏杀了,重点游戏图标,还是进不去,这个问题像是苹果系统问题,会短时间内主动把服务器域名拉黑

用了域名吧? 可能是 DNS 问题

是用了域名

:pray::pray::pray: 感谢 path发布出来了的话 需要怎么样搞?

看这里,自己先手动处理httpConnection的事吧
http://forum.cocos.com/t/httprequest-android/45905

我用了jsb.downloader替换getXMLHttpRequest 就是因为xhr 有问题 有时候 真是没办法

void WsThreadHelper::update(float dt)
{
/* Avoid locking if, in most cases, the queue is empty. This could be a little faster.
size() is not thread-safe, it might return a strange value, but it should be OK in our scenario.
*/
if (0 == _UIWsMessageQueue->size())
return;

// Returns quickly if no message
_UIWsMessageQueueMutex.lock();

if (0 == _UIWsMessageQueue->size())
{
    _UIWsMessageQueueMutex.unlock();
    return;
}

// Gets message
// Process all messages in the queue, in case it's piling up faster than being processed
std::list<WsMessage*> messages;
while (!_UIWsMessageQueue->empty()) {
    messages.push_back(_UIWsMessageQueue->front());
    _UIWsMessageQueue->pop_front();
}

_UIWsMessageQueueMutex.unlock();

for (auto msg : messages) {
    if (_ws)
    {
        _ws->onUIThreadReceiveMessage(msg);
    }
    CC_SAFE_DELETE(msg);
}

}

经常遇到在这行if (0 == _UIWsMessageQueue->size()) 嗝屁啊 直接闪退 有没有遇到的 怎么解决

@jiangtao_ye1 你是用creator么?
creator里面哪里有WsThreadHelper::update函数?

class WsThreadHelper
{
public:
    WsThreadHelper();
    ~WsThreadHelper();

    // Creates a new thread
    bool createWebSocketThread();
    // Quits websocket thread.
    void quitWebSocketThread();

    // Sends message to Cocos thread. It's needed to be invoked in Websocket thread.
    void sendMessageToCocosThread(const std::function<void()>& cb);

    // Sends message to Websocket thread. It's needs to be invoked in Cocos thread.
    void sendMessageToWebSocketThread(WsMessage *msg);

    // Waits the sub-thread (websocket thread) to exit,
    void joinWebSocketThread();

    void onSubThreadStarted();
    void onSubThreadLoop();
    void onSubThreadEnded();

protected:
    void wsThreadEntryFunc();
public:
    std::list<WsMessage*>* _subThreadWsMessageQueue;
    std::mutex   _subThreadWsMessageQueueMutex;
    std::thread* _subThreadInstance;
private:
    bool _needQuit;
};

不是Creator 是cocos-js3.9