為什麼谷歌不提供免費的TURN伺服器

2021-10-12 09:26:51 字數 1676 閱讀 2419

原文:

沒有免費的午餐,或者免費turn伺服器。

現在是2023年,webrtc已經伴隨我們5年多了。你可能會認為,現在人們對webrtc已經有了足夠的了解,這樣我們就不會有任何問題了。但事實並非如此。

有乙個問題總是不時的出現,為什麼谷歌(或者其他公司)不提供免費的turn伺服器?

除了因為當發生出錯時你沒有辦法控制它們,導致你不應該使用免費stun或turn伺服器這個事實以外,讓我們首先了解一下這兩種伺服器——更準確來說是協議有什麼區別,因為stun和turn通常部署在一起。

下面的插圖應該會告訴你stun工作原理:

當stun被使用時,瀏覽器或任何其他支援webrtc的裝置向stun伺服器傳送一條訊息,問他「我是誰?」。這裡的想法是,stun是用來找出你的公共ip位址。這是你的機器自己不知道的事情,因為你的機器「分配」在nat後面(且總是在nat後面)。這些資訊事實上也是動態的——你不能真的指望每次都收到相同的答案——或者由查詢本身產生的通道保持開放。

這是乙個簡單的問題,stun可以提供乙個單一的答案。此外,這是在udp上進行的,使其輕量級和快速,甚至不需要建立乙個長期的連線或有適當的上下文。

一旦瀏覽器得到了答案,他就可以分享它,如果其他一切都像預期的那樣工作,他將直接接收**資訊。

一開始,stun的這裡的作用僅限於這乙個問題。

以下是turn的工作原理:

當涉及到turn時,我們從繫結請求開始—我們的瀏覽器實際上是在詢問turn伺服器是否可以用作乙個中繼點。如果turn伺服器可以,那麼它現在可以用來接收來自會話中其他裝置的所有**資訊,並將其**到我們自己的瀏覽器。

雖然初始繫結請求並不費力(儘管在turn伺服器上仍然比傳送到stun伺服器的查詢更昂貴),但真正的問題是傳輸的**資訊。

假設我們在回合伺服器上平均每小時只進行10次會話,那麼我們每個月的流量將達到360gb。這也許是一項非常小的服務,也不是很貴,但如果你按想比例擴大規模的話就會很貴:每次會話使用更多的頻寬,而且平均每小時也會有有更多的會話——最終你將會有大量的資料流量。

以下是我們最近在testrtc上進行的壓力測試的結果:

在乙個有500名參與者的壓力測試中,我們將參與者分成5個瀏覽器組,每段多方通話只執行6.5分鐘,最終我們在每個方向都獲得了52gb的**流量。不到10分鐘。

現在想想如果所有的流量都需要通過乙個turn伺服器會發生什麼,而且那個turn伺服器對所有人都是免費的。

stun和turn完全不同。在實際生產中我們都需要webrtc服務。我們通常認為它們是部署在後台的單個伺服器實體——我們並不擔心stun對於資源的需求,而專注於我們需要什麼來實現turn在相當規模和多個地理位置上執行。

關閉turn伺服器並為其配置憑據也是一種標準實踐。對於webrtc,這些憑據在本質上需要是短暫的——按需為每個會話建立,而不是為每個使用者建立(在sip中常常是這樣)。

所以…

確保真正的執行緒安全 微軟為什麼不提供執行緒安全庫

執行緒安全在高併發情況下是乙個非常嚴重的問題。以下 在多執行緒訪問時,會出現問題。我們以list.add為例,來說明在多執行緒訪問下的狀況。以下 是list.add的實現。public void add t item 當兩個執行緒同時訪問乙個list的add方法時,這個方法的第一條指令就可能出現不一...

為什麼不大願意呼叫國內廠商提供的API

鄭昀 20100819 我平時喜歡玩mashup,所以對國外各種開放介面都有興趣看兩眼。像twitter的,yahoo 的 yahoo pipe yql google buzz google reader chart webfinger等 的,即使是很不著調的social graph api,都能很...

為什麼健身房的教練都不提倡做仰臥起坐呢?

題圖來自woodgrovesec.moe.edu.sg 陳柏齡 虎柔 文 如果你去健身房,很多教練都推薦你去練卷腹,而不是仰臥起坐,但是卻不和你說為什麼,或者只是簡單地說因為 捲腹 更有效果。那麼,為什麼健身房的教練都說不要練仰臥起坐呢?原因其實很簡單,就兩點,我先從仰臥起坐和卷腹的動作模式以及動作...