#ifndef WEBSOCKETCLIENTWITHPOOL_H #define WEBSOCKETCLIENTWITHPOOL_H #include "WebSocketClient.h" #include "ThreadPool.h" class WebSocketClientPool { public: explicit WebSocketClientPool(size_t thread_count); ~WebSocketClientPool(); // ³õʼ»¯¿Í»§¶Ë void init_clients(const std::vector& uris); // Í˳öËùÓпͻ§¶Ë void exit_clients(); // ʹÓÃÏ̳߳ط¢ËÍÏûÏ¢ void post_to_all(const std::string& message); void post_binary_to_all(const std::vector& binary_data); // ´Ó³ØÖÐÑ¡ÔñÒ»¸ö¿ÕÏеĿͻ§¶Ë½øÐз¢ËÍ£¬²»ÐèÒª·þÎñÆ÷ÏìÓ¦ bool post_to_idle_client(const std::string& message); bool post_binary_to_idle_client(const std::vector& binary_data); // ´Ó³ØÖÐÑ¡ÔñÒ»¸ö¿ÕÏеĿͻ§¶Ë½øÐз¢ËÍ£¬²¢ÐèÒª·þÎñÆ÷ÏìÓ¦ bool send_to_idle_client(const std::string& message, int timeout_ms); bool send_binary_to_idle_client(const std::vector& binary_data, int timeout_ms); // ´Ó³ØÖÐÑ¡ÔñÒ»¸ö¿ÕÏеĿͻ§¶Ë½øÐз¢ËÍ£¬²¢µÈ´ý·þÎñÆ÷ÏìÓ¦ bool send_to_idle_client_and_wait(const std::string& message, int timeout_ms); bool send_binary_to_idle_client_and_wait(const std::vector& binary_data, int timeout_ms); // ´Ó³ØÖÐÑ¡ÔñÒ»¸ö¿ÕÏеĿͻ§¶Ë½øÐз¢ËÍ£¬²¢µÈ´ý·þÎñÆ÷ÏìÓ¦£¬Èç¹û³¬Ê±ÔòÖØÊÔ bool send_to_idle_client_with_retry(const std::string& message, int total_timeout_ms, int retry_interval_ms); bool send_binary_to_idle_client_with_retry(std::vector&& binary_data, int total_timeout_ms, int retry_interval_ms); // ÉèÖà WebSocket ¿Í»§¶Ëʼþ´¦Àí³ÌÐò void set_open_handler(WebSocketClient::OpenHandler handler); void set_message_handler(WebSocketClient::MessageHandler handler); void set_close_handler(WebSocketClient::CloseHandler handler); void set_fail_handler(WebSocketClient::FailHandler handler); void set_pong_handler(WebSocketClient::PongHandler handler); private: std::vector> m_clients; ThreadPool m_thread_pool; }; #endif // WEBSOCKETCLIENTWITHPOOL_H