1

ストリーミングを行うための Lighttpd プラグインを作成したいと思います。

これまでのところ、関数「mod_strm_handle_physical」で client_socket (con->fd) を複製しています。子プロセスでストリーミングデータを送信できるようにします。メイン プロセスに関しては、接続構造体にステータスを設定して、この接続を閉じないようにサーバーに指示します。

「mod_strm_handle_physical」関数で行った方法は次のとおりです。

URIHANDLER_FUNC(mod_strm_handle_physical)
{
    if(con->uri.path->ptr)
    {
        if(!strcmp("/abcd", con->uri.path->ptr))
        {
            // change Content-Type
            response_header_overwrite(srv, con
                                     , CONST_STR_LEN("Content-Type")
                                     , CONST_STR_LEN("application/octet-stream"));

            con->http_status = 200;
            con->file_finished = 0; // not to close the connection
            con->response.keep_alive = 1;

            int dup_fd = dup(con->fd); // duplicate the client-socket

            int child = fork();
            if(child>0)
                return HANDLER_FINISHED;
            else if(child==0)
            {
                send(dup_fd, STREAMING_DATA, LENGTH, 0);
                close(dup_fd);

                exit(0);
            }
            else
                perror("fork()");
        }
    }

    return HANDLER_GO_ON;
}

問題は..このように、サーバーはストリーミングを実行でき、問題ないようです。ただし、サーバーは同時に複数のストリーミングを行うことはできません。私が間違っていることはありますか?ストリーミングジョブはアウトプロセスですが

4

0 に答える 0