CocosNet icon indicating copy to clipboard operation
CocosNet copied to clipboard

有一个BUG,关注一下

Open xysoko opened this issue 11 years ago • 3 comments

当网络数据过来超过了8192就不在读取数据了, 下次网络再来会继续读取后续的,这样就有一个问题,信息不及时,延迟严重

xysoko avatar Oct 22 '14 09:10 xysoko

bool CCNetDelegate::runRead() { while (true) { int nRet = m_oSocket.ccRead(m_pReadBuffer, SOCKET_READ_BUFFER_SIZE);

if( nRet == eSocketIoError || nRet == eSocketIoClosed )
{
    unregisterScheduler();
    m_oSocket.ccClose();
    m_eStatus = eSocketIoClosed;
    onDisconnected();
    return true;
}
else
{

#if 1 CCLOG("CCSOCKET READ %d", nRet); #endif m_oReadBuffer.writeData(m_pReadBuffer, (unsigned int)nRet); #if USING_PACKAGE_HEAD_LENGTH

    while( m_oReadBuffer.isReadable(sizeof(int)) )
    {

        m_oReadBuffer.moveReaderIndexToFront();
        int n_head_len = m_oReadBuffer.readInt();
        if( n_head_len <= 0 )
        {
            CCLOGERROR("invalidate head length");
            m_oReadBuffer.moveLeft(sizeof(int));
        }

        int n_content_len = (int)m_oReadBuffer.length();
        if( n_content_len - (int)(sizeof(int)) >= n_head_len )
        {
            m_oReadBuffer.moveLeft(sizeof(unsigned int));
            CCBuffer* pData = m_oReadBuffer.readData(n_head_len);
            m_oReadBuffer.moveLeft(n_head_len);
            m_oReadBuffer.moveReaderIndexToFront();
            m_oReadBuffer.moveWriterIndexToBack();

            onMessageReceived(*pData);
        }
        else
        {
            break;
        }
    }

#else CCBuffer* pData = (CCBuffer*) m_oReadBuffer.copy(); pData->autorelease(); m_oReadBuffer.clear();

    onMessageReceived(*pData);

#endif }

//保证数据是读取完了的,否则会掉信息
    if ( nRet != SOCKET_READ_BUFFER_SIZE)
    {
        break;
    }
}
return false;

}

也许有更好的办法, 还有一个问题, DEMO收网络数据过多,有卡顿很严重, 希望加入多线程处理

xysoko avatar Oct 22 '14 09:10 xysoko

//保证数据是读取完了的,否则会掉信息 if ( nRet != SOCKET_READ_BUFFER_SIZE) { break; }‍ 为什么要这样做,如果一次读不了nRet个字节,那不就死循环了吗,另外你说一次读太多了会卡,解决方案是这样,在一帧只读一次,通过这个宏来控制HANDLE_ON_SINGLE_FRAME ‍

------------------ 原始邮件 ------------------ 发件人: "xysoko";[email protected]; 发送时间: 2014年10月22日(星期三) 下午5:47 收件人: "Jason-lee-c/CocosNet"[email protected];

主题: [CocosNet] 有一个BUG,关注一下 (#1)

当网络数据过来超过了8192就不在读取数据了, 下次网络再来会继续读取后续的,这样就有一个问题,信息不及时,延迟严重

— Reply to this email directly or view it on GitHub.

leecjson avatar Nov 18 '14 14:11 leecjson

死循环 只会发生网络信息不停的来,从不间断就可会是死循环

xysoko avatar Nov 19 '14 00:11 xysoko