WebRTC給我們帶來(lái)了瀏覽器中的視頻、音頻聊天體驗(yàn)。但個(gè)人認(rèn)為,它最實(shí)用的特性莫過(guò)于——在瀏覽器之間建立一個(gè)點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)通道。在之前,瀏覽器到瀏覽器的數(shù)據(jù)傳遞通常是這樣一個(gè)流程:瀏覽器1發(fā)送數(shù)據(jù)給服務(wù)器,服務(wù)器處理,服務(wù)器再轉(zhuǎn)發(fā)給瀏覽器2。這三個(gè)過(guò)程都會(huì)帶來(lái)相應(yīng)的消耗,占用服務(wù)器帶寬不說(shuō),還減緩了消息從發(fā)送到接收的時(shí)間。其實(shí)最理想的方式就是瀏覽器1直接與瀏覽2進(jìn)行通信,服務(wù)器不需要參與其中。WebRTC 就提供了這樣一種方式。
如果對(duì)WebRTC和不太了解的同學(xué),可以先閱讀如下文章:
- WebRTC的
- 使用WebRTC搭建前端視頻聊天室——信令篇
- 使用WebRTC搭建前端視頻聊天室——入門篇
當(dāng)然服務(wù)器完全不參與其中,顯然是不可能的,用戶需要通過(guò)服務(wù)器上存儲(chǔ)的信息,才能確定需要和誰(shuí)建立連接。這里通過(guò)一個(gè)故事來(lái)講述建立連接的過(guò)程:
不如釣魚去
一些背景:
現(xiàn)在,老劉聽(tīng)說(shuō)老姚釣魚技術(shù)高超,想和老姚討論釣魚技巧。只要老劉和老姚相互之間知道對(duì)方的門牌號(hào)以及憑證,就可以串門了:
老劉和老姚相互之間知道了對(duì)方的門牌號(hào)和小區(qū)出入憑證,他們相互之間有什么需要交流的直接串門就行了,消息不再需要門衛(wèi)老大爺來(lái)代為傳達(dá)了
換個(gè)角度
我們把角色做一個(gè)映射:
于是乎故事就變成了這樣:
這樣,就建立了一個(gè)點(diǎn)對(duì)點(diǎn)的信道,流程如下所示:
故事
老劉和老姚已經(jīng)可以相互串門了,經(jīng)過(guò)一段時(shí)間的交流感情越來(lái)越深。老姚的親友送了20斤葡萄給老姚,老姚決定送10斤給老劉。老姚畢竟年事已高,不可能一次帶10斤。于是乎,老姚將葡萄分成了10份,每次去老劉家串門就送一份過(guò)去。
這里可以做如下類比:
這其實(shí)就是通過(guò)傳輸文件的方式,首先將文件分片,然后逐個(gè)發(fā)送,*再統(tǒng)一的進(jìn)行組合成一個(gè)新的文件
分片
通過(guò)HTML5的File API可以將type為file的input選中的文件讀取出來(lái),并轉(zhuǎn)換成data url字符串。這也就為我們提供了很方便的分片方式:
組合
通過(guò)發(fā)送的分片數(shù)據(jù),我們需要將其進(jìn)行組合,由于是data url字符串,在接收到所有包之后進(jìn)行拼接就可以了。拼接完成后就得到了一個(gè)文件完整的data url字符串,那么我們?nèi)绾螌⑦@個(gè)字符串轉(zhuǎn)換成文件呢?
方案一:直接跳轉(zhuǎn)下載
既然是個(gè)dataurl,我們直接將其賦值給window.location.href自然可以下載,但是這樣下載是沒(méi)法設(shè)定下載后的文件名的,這想一想都蛋疼
方案二:通過(guò)a標(biāo)簽下載
這個(gè)原理和跳轉(zhuǎn)下載類似,都是使用dataurl本身的特性,通過(guò)創(chuàng)建一個(gè)a標(biāo)簽,將dataurl字符串賦值給href屬性,然后使用download確定下載后的文件名,就可以完成下載了。但是很快又有新問(wèn)題了,稍微大一點(diǎn)的文件下載的時(shí)候頁(yè)面崩潰了。這是因?yàn)閐ataurl有大小限制
方案三:blob
其實(shí)可以通過(guò)給a標(biāo)簽創(chuàng)建blob url的方式來(lái)進(jìn)行下載,這個(gè)沒(méi)有大小限制。但是我們手上是dataurl,所以需要先進(jìn)行轉(zhuǎn)換:
獲得blob后,我們就可以通過(guò)URL API來(lái)下載了:
這里有幾個(gè)點(diǎn):
1. 其實(shí)是可以直接傳送blob的,但是只有ff支持,所以傳data url
2. chrome下載是直接觸發(fā)的,不會(huì)進(jìn)行詢問(wèn),firefox會(huì)先詢問(wèn)后下載,在詢問(wèn)過(guò)程中如果執(zhí)行了,下載就會(huì)取消,囧
升級(jí)
如我們所知,WebRTC最有特點(diǎn)的地方其實(shí)是可以傳輸獲得的視頻、音頻流,來(lái)實(shí)現(xiàn)視頻聊天。但事實(shí)上我們的使用習(xí)慣來(lái)看,一般人不會(huì)一開(kāi)始就打開(kāi)視頻聊天,而且視頻聊天時(shí)很消耗內(nèi)存的(32位機(jī)上一個(gè)連接至少20M左右好像,也有可能有出入)。所以常見(jiàn)的需求是,先建立一個(gè)包含的連接用于傳輸數(shù)據(jù),然后在需要時(shí)升級(jí)成可以傳輸視頻、音頻。
看看我們之前傳輸?shù)膕ession ,它其實(shí)來(lái)自Session Protocol??梢钥吹絯iki上的介紹:
這意味著什么呢?我們之前建立是沒(méi)有加視頻、音頻流的,而這個(gè)流的描述是寫在SDP里面的?,F(xiàn)在我們需要傳輸視頻、音頻,就需要添加這些描述。所以就得重新獲得SDP,然后構(gòu)建offer和answer再傳輸一次。傳輸?shù)牧鞒毯椭耙粯樱瑳](méi)什么區(qū)別。但這一次,我們不需要傳輸任何的ice candidate,這里我曾經(jīng)遇到了坑,經(jīng)過(guò)國(guó)外大大的點(diǎn)撥才明白過(guò)來(lái)。
Peertc
我將和websocket組合,實(shí)現(xiàn)了一個(gè)構(gòu)建點(diǎn)對(duì)點(diǎn)連接的庫(kù)Peertc,它提供非常簡(jiǎn)潔的方式來(lái)建立連接和發(fā)送數(shù)據(jù)、文件和視頻/音頻流,詳情見(jiàn)github。走過(guò)路過(guò)的記得star一下哦,有什么bug也非常希望能夠提出來(lái)。
*
WebRTC的點(diǎn)對(duì)點(diǎn)方式能夠運(yùn)用在很多場(chǎng)景:
- 如web qq這種Web IM工具,這就不說(shuō)了
- 如象棋這種雙人對(duì)戰(zhàn) 游戲 ,每一步的數(shù)據(jù)服務(wù)器時(shí)不關(guān)心的,所以完全可以點(diǎn)對(duì)點(diǎn)發(fā)送
- 一對(duì)一在線面試、在線教育,這其實(shí)是即時(shí)通信的一個(gè)業(yè)務(wù)方向
web前端培訓(xùn)一般都是5-6個(gè)月的時(shí)間,相信在IT領(lǐng)域發(fā)展的同學(xué)對(duì)web很熟悉。web編程語(yǔ)言排行中一直處于領(lǐng)先地位,這可以直接體現(xiàn)web的重要。因此很多同學(xué)準(zhǔn)備參加web培訓(xùn)機(jī)構(gòu)系統(tǒng)學(xué)習(xí)。
那么,web培訓(xùn)機(jī)構(gòu)哪家比較好?下面我們介紹一下。隨著web的普及,越來(lái)越多的人了解web,企業(yè)也會(huì)對(duì)求職者提出更高的要求,他們想招聘一些能馬上開(kāi)始工作的人,所以往往會(huì)招聘一些有項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)的人。這就是為什么那么多計(jì)算機(jī)專業(yè)的*生找不到工作,所以越來(lái)越多的*生會(huì)選擇在畢業(yè)前后參加一些專業(yè)的web培訓(xùn)課程,以增加他們的實(shí)踐經(jīng)驗(yàn)。只有增強(qiáng)自己的力量,才能立于不敗之地。
判斷web培訓(xùn)機(jī)構(gòu)好與壞主要看以下幾個(gè)方面 1.看教學(xué)課程內(nèi)容學(xué)習(xí)web技術(shù),最主要是與時(shí)俱進(jìn),掌握的技術(shù)點(diǎn)能夠滿足時(shí)下企業(yè)的用人需求。而想要了解一家培訓(xùn)機(jī)構(gòu)所提供的課程是否新穎,也可以去機(jī)構(gòu)的官網(wǎng)上看看,了解自己想學(xué)習(xí)的*的課程大綱??纯磳W(xué)習(xí)路線圖是如何安排的,有沒(méi)有從零到一的系統(tǒng)搭建,是不是有強(qiáng)化實(shí)訓(xùn)、實(shí)操的比重,有盡量多的項(xiàng)目實(shí)戰(zhàn)。因?yàn)槠髽I(yè)對(duì)web從業(yè)者的技術(shù)能力和動(dòng)手實(shí)戰(zhàn)能力要求較高。
2.看師資力量因?yàn)閣eb開(kāi)發(fā)技術(shù)知識(shí)的專業(yè)性很強(qiáng),如果盲目去學(xué)很容易走進(jìn)誤區(qū)。相反,有講師帶領(lǐng),站在巨人的肩膀上,往往事半功倍。畢竟現(xiàn)在這個(gè)時(shí)代只要多跟別人交流才能獲得更多更有價(jià)值的信息,初學(xué)者千萬(wàn)不能閉門造車。
3.看口碑
行業(yè)內(nèi)口碑比較好,學(xué)生對(duì)培訓(xùn)機(jī)構(gòu)比較認(rèn)可,這種機(jī)構(gòu)把精力放在了學(xué)生身上的機(jī)構(gòu),才是做教育的應(yīng)有態(tài)度。
4.看就業(yè)情況
以學(xué)生就業(yè)為目標(biāo)的培訓(xùn)機(jī)構(gòu)現(xiàn)在才是最主要的。要知道就業(yè)也是教學(xué)成果的體現(xiàn),沒(méi)有好的教學(xué)保證是做不到好的就業(yè)的。
5.上門免費(fèi)試聽(tīng)
試聽(tīng)是為了更好的去感受培訓(xùn)機(jī)構(gòu)的課程內(nèi)容、講課風(fēng)格、班級(jí)氛圍等,同時(shí)也能通過(guò)和班上在讀同學(xué)進(jìn)行交流,更進(jìn)一步去了解這家培訓(xùn)機(jī)構(gòu)各個(gè)方面是否符合自己的需要。
大部分人學(xué)習(xí)一項(xiàng)技術(shù)肯定是以就業(yè)為目標(biāo),那么學(xué)習(xí)web前端哪些知識(shí)才能找到一份工作?小蝸這里根據(jù)行業(yè)的變化以及企業(yè)的用人需求,整理了一份web前端的學(xué)習(xí)路線,只要掌握了以下內(nèi)容,找到一份工作基本不難。
*階段:專業(yè)核心基礎(chǔ)
階段目標(biāo):
1. 熟練掌握HTML5、CSS3、Less、Sass、響應(yīng)書布局、移動(dòng)端開(kāi)發(fā)。
2. 熟練運(yùn)用HTML+CSS特性完成頁(yè)面布局。
4. 熟練應(yīng)用CSS3技術(shù),動(dòng)畫、彈性盒模型設(shè)計(jì)。
5. 熟練完成移動(dòng)端頁(yè)面的設(shè)計(jì)。
6. 熟練運(yùn)用所學(xué)知識(shí)仿制任意Web網(wǎng)站。
7. 能綜合運(yùn)用所學(xué)知識(shí)完成網(wǎng)頁(yè)設(shè)計(jì)實(shí)戰(zhàn)。
知識(shí)點(diǎn):
1、Web前端開(kāi)發(fā)環(huán)境,HTML常用標(biāo)簽,表單元素,Table布局,CSS樣式表,DIV+CSS布局。熟練運(yùn)用HTML和CSS樣式屬性完成頁(yè)面的布局和美化,能夠仿制任意網(wǎng)站的前端頁(yè)面實(shí)現(xiàn)。
2、CSS3選擇器、偽類、過(guò)渡、變換、動(dòng)畫、字體圖標(biāo)、彈性盒模型、響應(yīng)式布局、移動(dòng)端。熟練運(yùn)用CSS3來(lái)開(kāi)發(fā)網(wǎng)頁(yè)、熟練開(kāi)發(fā)移動(dòng)端,整理網(wǎng)頁(yè)開(kāi)發(fā)技巧。
3、預(yù)編譯css技術(shù):less、sass基礎(chǔ)知識(shí)、以及插件的運(yùn)用、BootStrap源碼分析。能夠熟練使用 less、sass完成項(xiàng)目開(kāi)發(fā),深入了解BootStrap。
4、使用HTML、CSS、LESS、SASS等技術(shù)完成網(wǎng)頁(yè)項(xiàng)目實(shí)戰(zhàn)。通過(guò)項(xiàng)目掌握*階段html、css的內(nèi)容、完成PC端頁(yè)面設(shè)計(jì)和移動(dòng)端頁(yè)面設(shè)計(jì)。
第二階段:Web后臺(tái)技術(shù)
階段目標(biāo):
1. 了解的發(fā)展歷史、掌握Node環(huán)境搭建及npm使用。
2. 熟練掌握的基本數(shù)據(jù)類型和變量的概念。
3. 熟練掌握中的運(yùn)算符使用。
4. 深入理解分之結(jié)構(gòu)語(yǔ)句和循環(huán)語(yǔ)句。
5. 熟練使用數(shù)組來(lái)完成各種練習(xí)。
6.熟悉es6的語(yǔ)法、熟練掌握面向?qū)ο缶幊獭?/p>
7.DOM和BOM實(shí)戰(zhàn)練習(xí)和H5新特性和協(xié)議的學(xué)習(xí)。
知識(shí)點(diǎn):
1、軟件開(kāi)發(fā)流程、算法、變量、數(shù)據(jù)類型、分之語(yǔ)句、循環(huán)語(yǔ)句、數(shù)組和函數(shù)。熟練運(yùn)用的知識(shí)完成各種練習(xí)。
2、面向?qū)ο蠡A(chǔ)、異常處理機(jī)制、常見(jiàn)對(duì)象api,js的兼容性、ES6新特性。熟練掌握面向?qū)ο蟮拈_(kāi)發(fā)以及掌握es6中的重要內(nèi)容。
3、BOM操作和DOM操作。熟練使用BOM的各種對(duì)象、熟練操作DOM的對(duì)象。
4、h5相關(guān)api、canvas、ajax、數(shù)據(jù)模擬、touch事件、mockjs。熟練使用所學(xué)知識(shí)來(lái)完成網(wǎng)站項(xiàng)目開(kāi)發(fā)。
第三階段:數(shù)據(jù)庫(kù)和框架實(shí)戰(zhàn)
階段目標(biāo):
1. 綜合運(yùn)用Web前端技術(shù)進(jìn)行頁(yè)面布局與美化。
2. 綜合運(yùn)用Web前端開(kāi)發(fā)框架進(jìn)行Web系統(tǒng)開(kāi)發(fā)。
3. 熟練掌握Mysql、Mongodb數(shù)據(jù)庫(kù)的發(fā)開(kāi)。
4. 熟練掌握vue.js、webpack、elementui等前端框技術(shù)。
5. 熟練運(yùn)用Node.js開(kāi)發(fā)后臺(tái)應(yīng)用程序。
6. 對(duì)Restful,Ajax,JSON,開(kāi)發(fā)過(guò)程有深入的理解,掌握git的基本技能。
知識(shí)點(diǎn):
1、數(shù)據(jù)庫(kù)知識(shí),范式,MySQL配置,命令,建庫(kù)建表,數(shù)據(jù)的增刪改查,mongodb數(shù)據(jù)庫(kù)。深入理解數(shù)據(jù)庫(kù)管理系統(tǒng)通用知識(shí)及MySQL數(shù)據(jù)庫(kù)的使用與管理,為Node.js后臺(tái)開(kāi)發(fā)打下堅(jiān)實(shí)基礎(chǔ)。
2、模塊系統(tǒng),函數(shù),路由,全局對(duì)象,文件系統(tǒng),請(qǐng)求處理,Web模塊,Express框架,MySQL數(shù)據(jù)庫(kù)處理,,文件上傳等。熟練運(yùn)用Node.js運(yùn)行環(huán)境和后臺(tái)開(kāi)發(fā)框架完成Web系統(tǒng)的后臺(tái)開(kāi)發(fā)。
3、vue的組件、生命周期、路由、組件、前端工程化、webpack、elementui框架。Vue.js框架的基本使用有清晰的理解,能夠運(yùn)用Vue.js完成基礎(chǔ)前端開(kāi)發(fā)、熟練運(yùn)用Vue.js框架的高級(jí)功能完成Web前端開(kāi)發(fā)和組件開(kāi)發(fā),對(duì)MVVM模式有深刻理解。
4、需求分析,數(shù)據(jù)庫(kù)設(shè)計(jì),后臺(tái)開(kāi)發(fā),使用vue、node完成pc和移動(dòng)端整站開(kāi)發(fā)。于Node.js+Vue.js+Webpack+Mysql+Mongodb+Git,實(shí)現(xiàn)整站項(xiàng)目完整功能并上線發(fā)布。
第四階段:移動(dòng)端和微信實(shí)戰(zhàn)
階段目標(biāo):
1.熟練掌握React.js框架,熟練使用React.js完成開(kāi)發(fā)。
2.掌握移動(dòng)端開(kāi)發(fā)原理,理解原生開(kāi)發(fā)和混合開(kāi)發(fā)。
3.熟練使用react-native和Flutter框架完成移動(dòng)端開(kāi)發(fā)。
4.掌握微信小程序以及了解支付寶小程序的開(kāi)發(fā)。
5.完成大型電商項(xiàng)目開(kāi)發(fā)。
知識(shí)點(diǎn):
1、React面向組件編程、表單數(shù)據(jù)、組件通信、監(jiān)聽(tīng)、聲明周期、路由、Redux基本概念。練使用react完成項(xiàng)目開(kāi)發(fā)、掌握Redux中的異步解決方案Saga。
2、react-native、開(kāi)發(fā)工具、視圖與渲染、api操作、Flutter環(huán)境搭建、路由、ListView組件、網(wǎng)絡(luò)請(qǐng)求、打包。練掌握react-native和Flutter框架,并分別使用react-native和Flutter分別能開(kāi)發(fā)移動(dòng)端項(xiàng)目。
3、微信小程序基本介紹、開(kāi)發(fā)工具、視圖與渲染、api操作、支付寶小程序的入門和api學(xué)習(xí)。掌握微信小程序開(kāi)發(fā)了解支付寶小程序。
4、大型購(gòu)物網(wǎng)站實(shí)戰(zhàn),整個(gè)項(xiàng)目前后端分離開(kāi)發(fā);整個(gè)項(xiàng)目分為四部分:PC端網(wǎng)頁(yè)、移動(dòng)端APP、小程序、后臺(tái)管理。團(tuán)隊(duì)協(xié)作開(kāi)發(fā),使用git進(jìn)行版本控制。目期間可以擴(kuò)展Three.js 、。
web前端學(xué)習(xí)路線思維導(dǎo)圖
只要一個(gè)電話
我們免費(fèi)為您回電