將多個 Client 連接多路複用為單一 Backend 連接(類比數位電路 Multiplexer),Backend 專注業務邏輯,無需處理並發。核心事件:
std::map<int, TcpConnectionPtr> clientConns_。TcpConnection::setContext/getContext (boost::any) 存儲 Client ID,避免額外映射表。conn->setContext(id); / int id = boost::any_cast<int>(conn->getContext());TcpConnectionPtr 即 shared_ptr,自動引用計數保證 Backend 發送時物件存活。編寫 Test Harness(Java + Netty),扮演 Clients 與 Backend,事件匯聚到 BlockingQueue,Test Case 操縱 Harness 發起連接、發送數據、斷言回覆。優勢:
代碼見 examples/multiplexer,Harness 源碼在 harness/src/com/chenshuo/muduo/example/multiplexer。