我正在尋找一種便宜的解決方案來實現1通道中的許多用戶的實時縮放。WebRTC實時縮放
我正在使用sockjs,但在談論真正的大數字時,縮放比較煩人。
我在考慮使用webrtc來降低p2p的成本。服務器連接到所有用戶,而不是連接到只有有限數量的用戶,然後通過webrtc將他們的數據分發到p2p網絡。這是否合理?什麼是最簡單的實施方式?
該信息不是私人的,幾秒鐘< 5秒的延遲是可以接受的。
我正在尋找一種便宜的解決方案來實現1通道中的許多用戶的實時縮放。WebRTC實時縮放
我正在使用sockjs,但在談論真正的大數字時,縮放比較煩人。
我在考慮使用webrtc來降低p2p的成本。服務器連接到所有用戶,而不是連接到只有有限數量的用戶,然後通過webrtc將他們的數據分發到p2p網絡。這是否合理?什麼是最簡單的實施方式?
該信息不是私人的,幾秒鐘< 5秒的延遲是可以接受的。
是的,這是webRTC的用途:在沒有服務器的瀏覽器之間交換數據。爲了完成這項工作,你可能想要考慮管理連接的服務器上的一些管理計劃(因爲一個客戶需要告訴另一個客戶'嘿,我在這裏,連接到我..'),並考慮哪些當客戶端需要連接到其他人時,數據在哪個客戶端上。
作爲提示:我使用websockets(和nodejs插件:'ws')在nodejs中創建了一個服務器,以在客戶端之間進行通信,直到RTC設置爲可以流式傳輸音頻。做所有這些都很容易,但是需要改進。
正如我可以從你的問題閱讀,你沒有使用webRTC的經驗。只是給你一個良好的開端,這是需要發生作出RTC事情的正確順序:
Client 1 Server Client 2
Create an RTC object
Create offer
set localdescription = offer Create RTC object
send offer -------------------> ------>set remote description to offer
Create answer
local description = answer
set remote description<-------- <------send answer
This goes both directions:
onicecandidate send ----------> ------>set ICE candidate
Connection done!
交換這方面的數據我的建議是去使用WebSockets。兩個客戶端都打開一個websocket,並且每當一個客戶端發送一些東西時,就可以從另一個客戶端獲取websocket連接(它是一個對象)併發送消息。使用XHR,您只能讓瀏覽器連接,請求數據,並且數據不在x秒內重試。
總結:使用和設置webRTC進行點對點連接相當容易,但管理誰應該連接誰將會遇到很多麻煩。
編輯: 我的想法是,第一個客戶端連接到服務器,並通過XHR或websockets或類似的東西接收它的數據。如果你想瀏覽器的兼容性,你可能想要去socket.io,但這並不重要,因爲只有Chrome和Firefox支持webRTC(afaik)。然後你只需從瀏覽器連接到服務器。如果您計劃在同一個會話ID中進行多個交換,那麼您可以將其與需要下載它的人交換。
在服務器端,websockets返回一個對象'包含'當前連接。因此,如果客戶端1連接,則將其存儲在具有我們創建的ID的對象中。如果客戶端2連接,您也可以存儲它。然後,您可以從第一個客戶端獲取websocket對象並執行.send('your message')
。
現在真正的我會怎麼做。我將使用(ws)來確定通過websocket的連接,(http)用於http請求,(rtc)用於webRTC。 pc
是您的對等連接對象:window.dc = new RTCDataChannel(ICEServers);
。 sdp
意味着SessionDescriptionProtocol
,
服務器在對象內部創建會話實例。
var sessID = Math.random()。toString(36).substring(12,16);
sessions [sessID] = {};
您將此會話ID發送給客戶端(ws),因此它可以將此發送給其他人(使用郵件等)。另一個用戶連接到服務器(http)(ws),但不會請求一個ID,它會發送它。
dc.setRemoteDescription(sdp)
來存儲它,並創建一個答案。 (dc.createAnswer()
),設置這個答案(dc.setLocalDescription(sdp)
。這個答案被髮送到客戶端之一。現在你可以使用datachannel。我不知道該怎麼datachannel exacly的作品,因爲我只去過working with PeerConnection,這尤其是音頻和視頻流,你可以用它來了解如何建立連接,代碼爲my repo,裏面有很多代碼,因爲這是一個'profielwerkstuk'(一些學校的工件,這是我與朋友做的),有趣的東西是server.js(這是nodejs服務器,用於交換sdp和ICE候選)。網頁位於htdocs/mp.html(不是真的很有意思),而這樣做的JavaScript代碼片段全部在htdocs/scripts/rtc.js。
欲瞭解更多信息,你可能想看看this example,並在explainments here
已經有'something you want',並且它使用了大量的代碼,以使這成爲可能。 另外請注意,stackoverflow是問問題,而不是要求現成的代碼。如果你想要的話,看看職業生涯2。0,找到一個想爲你做這個的人。
編輯2: 現在我看到您的答案,我認爲最好的方法是將所有連接存儲在會話對象內的數組中,然後連接客戶端1 - > 2,2 - > 3, 3> 4等。但是,那麼你有零件等問題。想想torrent,在那裏你連接到多個人並從每個人下載小部件。這真的很難,是的,我不認爲有人已經做了這麼大的事情(除了sharefest)。如果你真的想做到這一點,你需要自己做最多的事情。花一些時間考慮如何解決這個問題,並使用stackoverflow(或其他信息站點)來查找如何設置rtc等。
是的,這是非常明智的,當涉及到實時通信時,WEBRTC是下一個最重要的事情!是什麼讓它如此明智是因爲它是用Javascript完成的。隨着時間的推移,它正在增長數百萬,並在更多的平臺上得到支持。這是低成本&高品質!
我不是在這裏打你或什麼,但是webrtc任何一天都會將節點從水中吹出。
選擇的WebRTC,你知道你想要;)
完全合理的。
WebRTC是瀏覽器中的低延遲P2P網絡。如果用戶的瀏覽器具有DataChannel支持,那麼你可以使用WebTorrent的類庫https://github.com/feross/webtorrent。
另請參見Sharefest的實現:https://www.sharefest.me/它與您正在尋找的想法非常相似。
要開始,請查看HTML5 Rocks WebRTC教程:http://www.html5rocks.com/en/tutorials/webrtc/basics/。此外,SimpleWebRTC庫非常方便:http://simplewebrtc.com/
哦sharefest是開源的。甜,謝謝! – Harry
謝謝,我很喜歡這個答案! – Harry
這是一個快速回復!告訴我,如果你想知道更多!我一直在努力去理解這一切,但我不想別人去做! – MarijnS95
我看到你甚至添加了一個賞金。這個答案不夠完整(因爲現在沒有真正的'提高'的問題,關於你現在已經閱讀這些答案的你想知道的內容),還是你想要一個更詳細的答案? – MarijnS95