1

我如何在多线程中使用带有 asio 的 websocket++ 作为 io_service per thread 模式?我想使用 websocket++ 作为多线程模式。名为“testee_server”的示例案例每个都从单个 io_service 调用 io_service::run()。我尝试按以下代码使用每个线程模式的 io_service。但发生段错误我该如何解决?

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;
        }
    }
4

0 回答 0