Https 当从服务器返回图片时,使用openssl的libwebsockets看起来很慢

Https 当从服务器返回图片时,使用openssl的libwebsockets看起来很慢,https,openssl,libwebsockets,Https,Openssl,Libwebsockets,我正在使用libwebsockets开发一个小型服务,用于连接浏览器和我的服务。当它在http中工作时,一切都正常。但当我使用openssl切换到https时,效果很差。例如,当我在浏览器中单击超链接时,我的服务将返回一张图片。但是它工作得很慢。在执行此操作时,我的cpu大约运行50%。我只是糊涂了,需要你的帮助。非常感谢~主要代码如下所示: case LWS_CALLBACK_HTTP: /* check for the "send a big file by hand" examp

我正在使用libwebsockets开发一个小型服务,用于连接浏览器和我的服务。当它在http中工作时,一切都正常。但当我使用openssl切换到https时,效果很差。例如,当我在浏览器中单击超链接时,我的服务将返回一张图片。但是它工作得很慢。在执行此操作时,我的cpu大约运行50%。我只是糊涂了,需要你的帮助。非常感谢~主要代码如下所示:

case LWS_CALLBACK_HTTP:

    /* check for the "send a big file by hand" example case */
    sprintf(cache_file, "%s\\%s", g_cache_path, (char*)in+1);
    n = GetLastIndex(cache_file, '/');
    if (n >= 0)
    {
        cache_file[n] = '\\';
    }
    p = buffer;

            // cache_file is my file name , should be transfer
    pss->hFile = CreateFile(cache_file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);

    if (pss->hFile == NULL || pss->hFile == INVALID_HANDLE_VALUE)
        return -1;

    //fstat(pss->hFile, &stat_buf);

    /*
     * we will send a big jpeg file, but it could be
     * anything.  Set the Content-Type: appropriately
     * so the browser knows what to do with it.
     */

    p += sprintf((char *)p,
        "HTTP/1.0 200 OK\x0d\x0a"
        "Server: libwebsockets\x0d\x0a"
        "Content-Type: image/png\x0d\x0a"
            "Content-Length: %u\x0d\x0a\x0d\x0a",
            GetFileSize(pss->hFile, 0));

    /*
     * send the http headers...
     * this won't block since it's the first payload sent
     * on the connection since it was established
     * (too small for partial)
     */

    n = libwebsocket_write(wsi, buffer,
           p - buffer, LWS_WRITE_HTTP);

    if (n < 0) {
        CloseHandle(pss->hFile);
        return -1;
    }
    /*
     * book us a LWS_CALLBACK_HTTP_WRITEABLE callback
     */
    libwebsocket_callback_on_writable(context, wsi);
    break;

case LWS_CALLBACK_HTTP_WRITEABLE:

    do {
        ReadFile(pss->hFile, buffer, sizeof buffer, &readLen, NULL);

        if (readLen <= 0)
            goto bail;

        m = libwebsocket_write(wsi, buffer, readLen, LWS_WRITE_HTTP);
        if (m < 0)
            /* write failed, close conn */
            goto bail;
        if (m != readLen)
            /* partial write, adjust */
            SetFilePointer(pss->hFile, m - readLen, 0, FILE_CURRENT);

    } while (!lws_send_pipe_choked(wsi));
    libwebsocket_callback_on_writable(context, wsi);
    break;
case LWS\u CALLBACK\u HTTP:
/*检查“手动发送大文件”示例案例*/
sprintf(缓存文件,“%s\\%s”,g\u缓存路径,+1中的字符*);
n=GetLastIndex(缓存文件“/”);
如果(n>=0)
{
缓存文件[n]='\\';
}
p=缓冲区;
//cache_file是我的文件名,应该是传输
pss->hFile=CreateFile(缓存文件、通用文件读取、文件共享文件读取、NULL、打开文件、文件标志、顺序文件扫描、NULL);
如果(pss->hFile==NULL | | pss->hFile==INVALID_HANDLE_值)
返回-1;
//fstat(pss->hFile和stat_buf);
/*
*我们将发送一个大的jpeg文件,但它可能是
*什么都行。设置内容类型:适当
*因此浏览器知道如何处理它。
*/
p+=sprintf((char*)p,
“HTTP/1.0 200正常\x0d\x0a”
“服务器:libwebsockets\x0d\x0a”
“内容类型:image/png\x0d\x0a”
“内容长度:%u\x0d\x0a\x0d\x0a”,
GetFileSize(pss->hFile,0);
/*
*发送http头。。。
*这不会阻塞,因为它是发送的第一个有效负载
*关于建立以来的联系
*(太小,不适合局部使用)
*/
n=libwebsocket_写入(wsi、缓冲区、,
p-缓冲区,LWS\u写入\u HTTP);
if(n<0){
关闭手柄(pss->hFile);
返回-1;
}
/*
*为我们预订LWS\u回调\u HTTP\u可写回调
*/
libwebsocket_回调_on_writable(上下文,wsi);
打破
案例LWS\u回调\u HTTP\u可写:
做{
ReadFile(pss->hFile,buffer,sizeof buffer,&readLen,NULL);
if(readLen-hFile,m-readLen,0,当前文件);
}而(!lws_发送_管道_阻塞(wsi));
libwebsocket_回调_on_writable(上下文,wsi);
打破

这与OpenSSL有什么关系?返回一个
BOOL
。如果失败,那么您不应该使用
readLen
。是的,这是真的。我在这里更改了代码,thx~但这并不是它在chrome中返回如此缓慢的原因,因为它在IE和firefox中看起来很好