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