go語(yǔ)言適用的領(lǐng)域有:

專業(yè)領(lǐng)域包括成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、商城網(wǎng)站開發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,創(chuàng)新互聯(lián)建站的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。
Go語(yǔ)言主要用作服務(wù)器端開發(fā),其定位是用來開發(fā)“大型軟件”的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長(zhǎng),支持云計(jì)算的網(wǎng)絡(luò)服務(wù)。
Go語(yǔ)言作為服務(wù)器編程語(yǔ)言,很適合處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫(kù)代理等;網(wǎng)絡(luò)編程方面,Go語(yǔ)言廣泛應(yīng)用于Web應(yīng)用、API應(yīng)用、下載應(yīng)用等;除此之外,Go語(yǔ)言還可用于內(nèi)存數(shù)據(jù)庫(kù)和云平臺(tái)領(lǐng)域,目前國(guó)外很多云平臺(tái)都是采用Go開發(fā)。
Go語(yǔ)言能夠讓程序員快速開發(fā),并且在軟件不斷的增長(zhǎng)過程中,它能讓程序員更容易地進(jìn)行維護(hù)和修改。它融合了傳統(tǒng)編譯型語(yǔ)言的高效性和腳本語(yǔ)言的易用性和富于表達(dá)性。
Go語(yǔ)言作為一門大型項(xiàng)目開發(fā)語(yǔ)言,在很多大公司相繼使用,甚至完全轉(zhuǎn)向Go開發(fā),其中代表有Google、Facebook、騰訊、百度、阿里巴巴、京東、小米以及360、美團(tuán)、滴滴以及新浪等,因此,Go語(yǔ)言的開發(fā)前景還是很不錯(cuò)的!
三次握手:
1. 主動(dòng)發(fā)起連接請(qǐng)求端(客戶端),發(fā)送 SYN 標(biāo)志位,攜帶數(shù)據(jù)包、包號(hào)
2. 被動(dòng)接收連接請(qǐng)求端(服務(wù)器),接收 SYN,回復(fù) ACK,攜帶應(yīng)答序列號(hào)。同時(shí),發(fā)送SYN標(biāo)志位,攜帶數(shù)據(jù)包、包號(hào)
3. 主動(dòng)發(fā)起連接請(qǐng)求端(客戶端),接收SYN 標(biāo)志位,回復(fù) ACK。
被動(dòng)端(服務(wù)器)接收 ACK —— 標(biāo)志著 三次握手建立完成( Accept()/Dial() 返回 )
四次揮手:
1. 主動(dòng)請(qǐng)求斷開連接端(客戶端), 發(fā)送 FIN標(biāo)志,攜帶數(shù)據(jù)包
2. 被動(dòng)接受斷開連接端(服務(wù)器), 發(fā)送 ACK標(biāo)志,攜帶應(yīng)答序列號(hào)。 —— 半關(guān)閉完成。
3. 被動(dòng)接受斷開連接端(服務(wù)器), 發(fā)送 FIN標(biāo)志,攜帶數(shù)據(jù)包
4. 主動(dòng)請(qǐng)求斷開連接端(客戶端), 發(fā)送 最后一個(gè) ACK標(biāo)志,攜帶應(yīng)答序列號(hào)。—— 發(fā)送完成,客戶端不會(huì)直接退出,等 2MSL時(shí)長(zhǎng)。
等 2MSL待目的:確保服務(wù)器 收到最后一個(gè)ACK
滑動(dòng)窗口:
通知對(duì)端本地存儲(chǔ)數(shù)據(jù)的 緩沖區(qū)容量。—— write 函數(shù)在對(duì)端 緩沖區(qū)滿時(shí),有可能阻塞。
TCP狀態(tài)轉(zhuǎn)換:
1. 主動(dòng)發(fā)起連接請(qǐng)求端:
CLOSED —— 發(fā)送SYN —— SYN_SENT(了解) —— 接收ACK、SYN,回發(fā) ACK —— ESTABLISHED (數(shù)據(jù)通信)
2. 主動(dòng)關(guān)閉連接請(qǐng)求端:
ESTABLISHED —— 發(fā)送FIN —— FIN_WAIT_1 —— 接收ACK —— FIN_WAIT_2 (半關(guān)閉、主動(dòng)端)
—— 接收FIN、回復(fù)ACK —— TIME_WAIT (主動(dòng)端) —— 等 2MSL 時(shí)長(zhǎng) —— CLOSED
3. 被動(dòng)建立連接請(qǐng)求端:
CLOSED —— LISTEN —— 接收SYN、發(fā)送ACK、SYN —— SYN_RCVD —— 接收 ACK —— ESTABLISHED (數(shù)據(jù)通信)
4. 被動(dòng)斷開連接請(qǐng)求端:
ESTABLISHED —— 接收 FIN、發(fā)送 ACK —— CLOSE_WAIT —— 發(fā)送 FIN —— LAST_ACK —— 接收ACK —— CLOSED
windows下查看TCP狀態(tài)轉(zhuǎn)換:
netstat -an | findstr? 端口號(hào)
Linux下查看TCP狀態(tài)轉(zhuǎn)換:
netstat -an | grep? 端口號(hào)
TCP和UDP對(duì)比:?
TCP: 面向連接的可靠的數(shù)據(jù)包傳遞。 針對(duì)不穩(wěn)定的 網(wǎng)絡(luò)層,完全彌補(bǔ)。ACK
UDP:無連接不可靠的報(bào)文傳輸。 針對(duì)不穩(wěn)定的 網(wǎng)絡(luò)層,完全不彌補(bǔ)。還原網(wǎng)絡(luò)真實(shí)狀態(tài)。
優(yōu)點(diǎn)???????????????????????????????????????????????????????????? 缺點(diǎn)
TCP: 可靠、順序、穩(wěn)定 ???????????????????????????????????? 系統(tǒng)資源消耗大,程序?qū)崿F(xiàn)繁復(fù)、速度慢
UDP:系統(tǒng)資源消耗小,程序?qū)崿F(xiàn)簡(jiǎn)單、速度快 ???????????????????????? 不可靠、無序、不穩(wěn)定
使用場(chǎng)景:
TCP:大文件、可靠數(shù)據(jù)傳輸。 對(duì)數(shù)據(jù)的 穩(wěn)定性、準(zhǔn)確性、一致性要求較高的場(chǎng)合。
UDP:應(yīng)用于對(duì)數(shù)據(jù)時(shí)效性要求較高的場(chǎng)合。 網(wǎng)絡(luò)直播、電話會(huì)議、視頻直播、網(wǎng)絡(luò)游戲。
UDP-CS-Server實(shí)現(xiàn)流程:
1.? 創(chuàng)建 udp地址結(jié)構(gòu) ResolveUDPAddr(“協(xié)議”, “IP:port”) —— udpAddr 本質(zhì) struct{IP、port}
2.? 創(chuàng)建用于 數(shù)據(jù)通信的 socket ListenUDP(“協(xié)議”, udpAddr ) —— udpConn (socket)
3.? 從客戶端讀取數(shù)據(jù),獲取對(duì)端的地址 udpConn.ReadFromUDP() —— 返回:n,clientAddr, err
4.? 發(fā)送數(shù)據(jù)包給 客戶端 udpConn.WriteToUDP("數(shù)據(jù)", clientAddr)
UDP-CS-Client實(shí)現(xiàn)流程:
1.? 創(chuàng)建用于通信的 socket。 net.Dial("udp", "服務(wù)器IP:port") —— udpConn (socket)
2.? 以后流程參見 TCP客戶端實(shí)現(xiàn)源碼。
UDPserver默認(rèn)就支持并發(fā)!
------------------------------------
命令行參數(shù): 在main函數(shù)啟動(dòng)時(shí),向整個(gè)程序傳參。 【重點(diǎn)】
語(yǔ)法: go run xxx.go ? argv1 argv2? argv3? argv4 。。。
xxx.exe:? 第 0 個(gè)參數(shù)。
argv1 :第 1 個(gè)參數(shù)。
argv2 :第 2 個(gè)參數(shù)。
argv3 :第 3 個(gè)參數(shù)。
argv4 :第 4 個(gè)參數(shù)。
使用: list := os.Args? 提取所有命令行參數(shù)。
獲取文件屬性函數(shù):
os.stat(文件訪問絕對(duì)路徑) —— fileInfo 接口
fileInfo 包含 兩個(gè)接口。
Name() 獲取文件名。 不帶訪問路徑
Size() 獲取文件大小。
網(wǎng)絡(luò)文件傳輸 —— 發(fā)送端(客戶端)
1.? 獲取命令行參數(shù),得到文件名(帶路徑)filePath list := os.Args
2.? 使用 os.stat() 獲取 文件名(不帶路徑)fileName
3.? 創(chuàng)建 用于數(shù)據(jù)傳輸?shù)?socket? net.Dial("tcp", “服務(wù)器IP+port”) —— conn
4.? 發(fā)送文件名(不帶路徑)? 給接收端, conn.write()
5.? 讀取 接收端回發(fā)“ok”,判斷無誤。封裝函數(shù) sendFile(filePath, conn) 發(fā)送文件內(nèi)容
6.? 實(shí)現(xiàn) sendFile(filePath,? conn)
1) 只讀打開文件 os.Open(filePath)
for {
2) 從文件中讀數(shù)據(jù)? f.Read(buf)
3) 將讀到的數(shù)據(jù)寫到socket中? conn.write(buf[:n])
4)判斷讀取文件的 結(jié)尾。 io.EOF. 跳出循環(huán)
}
網(wǎng)絡(luò)文件傳輸 —— 接收端(服務(wù)器)
1. 創(chuàng)建用于監(jiān)聽的 socket net.Listen() —— listener
2. 借助listener 創(chuàng)建用于 通信的 socket listener.Accpet()? —— conn
3. 讀取 conn.read() 發(fā)送端的 文件名, 保存至本地。
4. 回發(fā) “ok”應(yīng)答 發(fā)送端。
5. 封裝函數(shù),接收文件內(nèi)容 recvFile(文件路徑)
1) f = os.Create(帶有路徑的文件名)
for {
2)從 socket中讀取發(fā)送端發(fā)送的 文件內(nèi)容 。 conn.read(buf)
3)? 將讀到的數(shù)據(jù) 保存至本地文件 f.Write(buf[:n])
4)? 判斷 讀取conn 結(jié)束, 代表文件傳輸完成。 n == 0? break
}
Go語(yǔ)言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語(yǔ)言,Go尤其擅長(zhǎng)并發(fā)編程,性能堪比C語(yǔ)言,開發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語(yǔ)言”。
Go語(yǔ)言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開發(fā)的首選語(yǔ)言。
Go語(yǔ)言能干什么?
1、服務(wù)端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語(yǔ)言開發(fā);
3、網(wǎng)絡(luò)編程:大量?jī)?yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;
4、Paas云平臺(tái)領(lǐng)域:Kubernetes和Docker Swarm等;
5、分布式存儲(chǔ)領(lǐng)域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區(qū)塊鏈領(lǐng)域:區(qū)塊鏈里面有兩個(gè)明星項(xiàng)目以太坊和fabric都使用Go語(yǔ)言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語(yǔ)言實(shí)現(xiàn)的;
8、爬蟲及大數(shù)據(jù):Go語(yǔ)言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。
gopro連接電腦普通屏幕直播,比如三星顯示器。而且現(xiàn)在gopro不僅可以連電腦直播了,連手機(jī)都可以。說在直播app已經(jīng)開發(fā)出了手機(jī)直播支持gopro接入的功能了。可以去試試直播。
GoPro Hero 7 Black:支持GPS,10米防水,語(yǔ)音控制,視頻直播,視頻穩(wěn)定:HyperSmooth。
GoPro Hero8 Black:支持GPS,10米防水,語(yǔ)音喚醒,視頻穩(wěn)定:HyperSmooth2.0。
主要優(yōu)勢(shì):
新的GoPro相機(jī)提供了多種裁剪模式,比如超寬的170度視角、中等的127度視角和窄的79度視角,Hero6 Black和新款的Hero7 Black甚至有模仿傳統(tǒng)變焦鏡頭的觸控變焦功能,利用不同的視野是另一種混合你的照片的方法。
別忘了你甚至可以把你的GoPro倒掛起來,它會(huì)自動(dòng)翻轉(zhuǎn)鏡頭,以正確的方式顯示它,這里有一個(gè)簡(jiǎn)單的方法來記住你應(yīng)該選擇哪個(gè)視場(chǎng):如果你不確定你的框架,想知道你得到了所有的動(dòng)作,選擇超寬,當(dāng)你對(duì)畫面有了更多的控制,想要專注于某個(gè)特定的主題或場(chǎng)景區(qū)域時(shí),較窄的視野是很好的選擇。
rtsp流在主流瀏覽器并不支持直接播放。比如大華的視頻流:rtsp://admin:123456@
192.168.10.129/cam/realmonitor?channel=1subtype=0,用vlc可以直接播放。但在瀏覽器會(huì)報(bào)ERR_UNKNOWN_URL_SCHEME。那如何在瀏覽器中播放呢。
以下列出幾種方案。
1、安裝插件(chrome最新版基本都不支持)
類如:kurento,vlc插件(谷歌瀏覽器版本41以下),vgx插件(不支持高版本,chrome72.0版本可用)等。
2、安裝軟件(中間件,基本都付費(fèi))
類如:Appemit(調(diào)用vlc插件播放rtsp),可以免安裝的,目前只能windows,免費(fèi)版會(huì)有提示。
猿大師中間件(底層調(diào)用VLC的ActiveX控件,實(shí)現(xiàn)在主流瀏覽器網(wǎng)頁(yè)中內(nèi)嵌播放多路RTSP的實(shí)時(shí)視頻流),中間件收費(fèi)的。
PluginOK(牛插)中間件。底層調(diào)用ActiveX控件VlcOcx.dll。(商業(yè)用途需付費(fèi)使用)
3、服務(wù)器拉流轉(zhuǎn)發(fā)及協(xié)議轉(zhuǎn)換
示意圖如下所示:
推流--------------服務(wù)器轉(zhuǎn)發(fā)--------------拉流
方法一覽:
a,vlc軟件串流到http協(xié)議 ,網(wǎng)頁(yè)顯示幾個(gè)視頻需啟動(dòng)幾個(gè)vlc,只適合應(yīng)急場(chǎng)景。
b,html5 + websocket_rtsp_proxy 實(shí)現(xiàn)視頻流直播 ,基于MSE(Media Source Extensions,W3C),擴(kuò)展H5的功能。
步驟:服務(wù)器安裝streamedian服務(wù)器,客戶端通過video標(biāo)簽播放。
原型圖:
價(jià)格:
c.基于nginx的rsmp轉(zhuǎn)發(fā)
基于nginx實(shí)現(xiàn)rtmp轉(zhuǎn)化,用flash實(shí)現(xiàn)播放。由于flash目前大多瀏覽器默認(rèn)禁用,不推薦此方式。
步驟:安裝ffmpeg工具,安裝nginx。
另外nginx-rtmp-module也支持HLS協(xié)議,可以搭建基于hls的直播服務(wù)器。
d.rtsp轉(zhuǎn)hls播放,通過ffmpeg轉(zhuǎn)碼
步驟:安裝ffmpeg工具,ffmpeg轉(zhuǎn)碼。
形如:
ffmpeg -i "rtsp://admin:123456@192.168.10.129/cam/realmonitor?channel=1subtype=0" -c copy -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 "D:/hls/test.m3u8"
缺點(diǎn)是直播流延時(shí)很大,對(duì)實(shí)時(shí)要求比較高的不滿足要求。
案例:基于EasyDarwin拾建轉(zhuǎn)碼服務(wù)器。參考地址:
通過存儲(chǔ)的m3u8去讀取。
e.websocket代理推送,F(xiàn)FMPEG轉(zhuǎn)碼
此方法與a,b類似。但更實(shí)用。
以下提供兩種方案:
(1)Gin+WebSocket+FFMPEG實(shí)現(xiàn)rtsp轉(zhuǎn)碼,參考:
通過FFMPEG把rstp轉(zhuǎn)成http,ginrtsp作為轉(zhuǎn)發(fā)服務(wù)器,但需要自己寫相應(yīng)接口,需要了解go語(yǔ)言。
(2)node + ffmpeg + websocket + flv.js,參考:
步驟:在node服務(wù)中建立websocket;通過fluent-ffmpeg轉(zhuǎn)碼,將RTSP 流轉(zhuǎn)為flv格式;通過flv.js連接websocket,并對(duì)獲取的flv格式視頻數(shù)據(jù)進(jìn)行渲染播放。
import WebSocket from 'ws'import webSocketStream from 'websocket-stream/stream'import ffmpeg from 'fluent-ffmpeg'// 建立WebSocket服務(wù)const wss = new WebSocket.Server({ port: 8888, perMessageDeflate: false })// 監(jiān)聽連接wss.on('connection', handleConnection)// 連接時(shí)觸發(fā)事件function handleConnection (ws, req) {? // 獲取前端請(qǐng)求的流地址(前端websocket連接時(shí)后面帶上流地址)? const url = req.url.slice(1)? // 傳入連接的ws客戶端 實(shí)例化一個(gè)流? const stream = webSocketStream(ws, { binary: true })? // 通過ffmpeg命令 對(duì)實(shí)時(shí)流進(jìn)行格式轉(zhuǎn)換 輸出flv格式? const ffmpegCommand = ffmpeg(url)? ? .addInputOption('-analyzeduration', '100000', '-max_delay', '1000000')? ? .on('start', function () { console.log('Stream started.') })? ? .on('codecData', function () { console.log('Stream codecData.') })? ? .on('error', function (err) {? ? ? console.log('An error occured: ', err.message)? ? ? stream.end()? ? })? ? .on('end', function () {? ? ? console.log('Stream end!')? ? ? stream.end()? ? })? ? .outputFormat('flv').videoCodec('copy').noAudio()? stream.on('close', function () {? ? ffmpegCommand.kill('SIGKILL')? })? try {? ? // 執(zhí)行命令 傳輸?shù)綄?shí)例流中返回給客戶端? ? ffmpegCommand.pipe(stream)? } catch (error) {? ? console.log(error)? }}
優(yōu)點(diǎn)全部基于js。前端即可搞定。
參考:
極客時(shí)間的GO語(yǔ)言進(jìn)階訓(xùn)練營(yíng)是很不錯(cuò),知識(shí)內(nèi)容涉及比較全面,從編程語(yǔ)言到中間件、系統(tǒng)設(shè)計(jì)再到架構(gòu)都安排了相關(guān)課程,老師們?cè)谡n程中不講語(yǔ)法和用法,重點(diǎn)傳遞設(shè)計(jì)原理和最佳實(shí)踐,講課的過程中貼合工作場(chǎng)景,分享真實(shí)的干貨案例,啟發(fā)學(xué)員的思維讓其自主進(jìn)行學(xué)習(xí),還幫學(xué)員建立系統(tǒng)大局觀,有助于學(xué)員深層次的提升。
網(wǎng)站題目:go語(yǔ)言視頻直播服務(wù),go語(yǔ)言教學(xué)視頻
轉(zhuǎn)載源于:http://chinadenli.net/article2/hcjeic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、用戶體驗(yàn)、網(wǎng)站維護(hù)、品牌網(wǎng)站制作、網(wǎng)站策劃、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)