Как я могу использовать Websocket++ с ASIO в многопоточности, что в качестве io_service для режима потока?

Как я могу использовать Websocket++ с ASIO в многопоточности, что в качестве io_service для режима потока? Я хочу использовать websocket++ как многопоточный режим. пример случая с именем "testee_server" каждый вызывает io_service::run() из одного io_service. Я попытался использовать io_service для каждого режима потока, как показано ниже. Ошибка сегмента code.but. Как я могу решить эту проблему?

int main( int argc, char * argv[] )
    {
        /*
         * Create a server endpoint
         * server testee_server;
         */
        short   port        = 9002;
        size_t  num_threads = 3;

        vector < server * >server_;

        try {
            for ( size_t i = 0; i < num_threads; i++ )
            {
                /* Total silence */
                server testee_server;
                testee_server.clear_access_channels( websocketpp: : log: : alevel: : all );
                testee_server.clear_error_channels( websocketpp: : log: : alevel: : all );

                /* Initialize ASIO */
                testee_server.init_asio();
                testee_server.set_reuse_addr( true );

                /* Register our message handler */
                testee_server.set_message_handler( bind( &on_message, &testee_server, ::_1, ::_2 ) );
                testee_server.set_socket_init_handler( bind( &on_socket_init, ::_1, ::_2 ) );

                /* Listen on specified port with extended listen backlog */
                testee_server.set_listen_backlog( 8192 );
                testee_server.listen( port );

                /* Start the server accept loop */
                testee_server.start_accept();
    std: : cout << &testee_server << std : : endl;
                server_.push_back( &testee_server );
            }

            /* Start the ASIO io_service run loop */
            if ( num_threads == 1 )
            {
                server_[0] - > run();
            } else {
                typedef websocketpp : : lib : : shared_ptr < websocketpp : : lib : : thread > thread_ptr;
    std: : vector < thread_ptr > ts;
                for ( size_t i = 0; i < num_threads; i++ )
                {
    std: : cout << server_[i] << std : : endl;
                    ts.push_back( websocketpp: : lib: : make_shared < websocketpp : : lib : : thread > ( &server: : run, server_[i] ) );
                }

                for ( size_t i = 0; i < num_threads; i++ )
                {
                    ts[i] - > join();
                }
            }
        } catch ( websocketpp : : exception const & e ) {
    std: : cout << "exception: " << e.what() << std : : endl;
        }
    }

0 ответов

Другие вопросы по тегам