本篇文章我們將講解如何優化WebRTC網關服務器的線程方案。這個也是網關服務器架構設計的核心部分。
我們做WebRTC網關服務器的時候,不僅要考慮功能可用,還要考慮并發性能。有三種方案可以選擇:
第一種方案是一種多線程的方案,就是為每一個client或者是每一個PeerConnection建立一個獨立的線程去做收發。這個方案的劣勢很明顯,它跨線程的流程就會很多,效率也不高。但是,這確實是某些開源服務器的方案;
第二種方案是單線程的方案,所有用戶的I/O以及業務操作都在服務端的一個線程里做完,在用戶量不大或者服務端硬件資源可以隔離的情況下,它是一個比較好的方案。但是這種方案也有劣勢,當我們使用物理機作為服務器時,單線程是沒有辦法利用多核優勢的;如果同時啟動多個進程,則需要多個外網端口和域名,維護的成本也會比較高;
第三種方案是多線程優化方案,也是網關一期實現的方案,I/O單獨在一個線程來做,同一個通話的用戶在同一個業務邏輯線程做業務操作,同時創建一組業務邏輯線程為所有用戶服務。