久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

關(guān)于go語(yǔ)言http例子的信息

go語(yǔ)言聊天室實(shí)現(xiàn)(六)創(chuàng)建HTTP連接,并升級(jí)為長(zhǎng)連接

我們?cè)趍ian函數(shù)中,首先初始化配置文件,然后新建http連接。

忻城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!

這個(gè)連接創(chuàng)建之后,監(jiān)聽(tīng)服務(wù)器的9999端口。如果url的路徑后綴為 "/ws",就轉(zhuǎn)發(fā)到ws/ws.go中的IndexHandler方法中。

這個(gè)方法中首先我們創(chuàng)建一個(gè)websocket的Upgrader實(shí)例,然后我們使用Upgrader的upgrade方法來(lái)升級(jí)一下我們的連接為長(zhǎng)連接。

升級(jí)完成之后會(huì)返回一個(gè)*websocket.Conn的連接,我們之后所有的關(guān)于連接的操作,都是基于該conn的。

在該連接完成之后,我們將連接存放到一個(gè)名為Client的map中,以便之后管理更為方便。

之后,我們啟動(dòng)一個(gè)goroutine來(lái)讀取連接中發(fā)送的信息內(nèi)容,再根據(jù)內(nèi)容進(jìn)行相應(yīng)的操作。

Go語(yǔ)言的應(yīng)用

Go語(yǔ)言由Google公司開(kāi)發(fā),并于2009年開(kāi)源,相比Java/Python/C等語(yǔ)言,Go尤其擅長(zhǎng)并發(fā)編程,性能堪比C語(yǔ)言,開(kāi)發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語(yǔ)言”。

Go語(yǔ)言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開(kāi)發(fā)的首選語(yǔ)言。

Go語(yǔ)言應(yīng)用范圍:

1、服務(wù)端開(kāi)發(fā):以前你使用C或者C++做的那些事情,用Go來(lái)做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;

2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語(yǔ)言開(kāi)發(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、爬蟲(chóng)及大數(shù)據(jù):Go語(yǔ)言天生支持并發(fā),所以十分適合編寫(xiě)分布式爬蟲(chóng)及大數(shù)據(jù)處理。

http的共享怎么開(kāi)

這里我介紹兩種方法!

一 ?:用IIS或者Apache之類(lèi)的web服務(wù)器軟件實(shí)現(xiàn)http文件共享

?這里我以IIS為例介紹下用常用的web服務(wù)器實(shí)現(xiàn)文件共享的方法,具體如下(以我機(jī)器為例):

? 1、打開(kāi)IIS,打開(kāi)“網(wǎng)站 -- 默認(rèn)網(wǎng)站”,右鍵點(diǎn)擊“屬性”,點(diǎn)擊“主目錄”,勾選“目錄瀏覽”選項(xiàng),如下圖所示:

??

2、進(jìn)入文件夾C:\Inetpub\wwwroot,拷貝文件“1.7z“到這個(gè)目錄:

? ?

3、打開(kāi)瀏覽器,輸入本機(jī)ip(比如我的:192.168.1.123),即可看到共享的文件并可以下載:

? ?

? ?點(diǎn)擊“1.7z”即可下載。

二 ?:用python或者go語(yǔ)言實(shí)現(xiàn)http文件共享

1、python實(shí)現(xiàn)http文件共享:

? 用過(guò)python的都知道python有一個(gè)很牛x的命令:

python?-m?SimpleHTTPServer

在C:\Python27下運(yùn)行命令:

?打開(kāi)瀏覽器,可以看到如下效果:

?這個(gè)命令的默認(rèn)端口是8000,如果我再加一個(gè)端口參數(shù),可以用其它端口進(jìn)行訪問(wèn),命令如下:

打開(kāi)瀏覽器:

? ??知道了這個(gè)原理,可以寫(xiě)個(gè)bat文件,在需要的時(shí)候copy到相應(yīng)的目錄雙擊即可,比如我的httpShare.bat文件如下:

? ? ?python -m SimpleHTTPServer 80

? ? ?默認(rèn)用80端口,訪問(wèn)時(shí)候只需要輸入我的ip地址即可。

2、go語(yǔ)言實(shí)現(xiàn)http文件共享:

上面的方法很方便,windows和linux通吃,不過(guò)前提是要安裝python

這里我有個(gè)用go語(yǔ)言實(shí)現(xiàn)的,也是windows和linux通吃(windows下不知道怎么配置的可以參考我之前的文章:,類(lèi)似C/C++,是代碼可移植,使用前你只需編譯一次。

下面是示例代碼(httpShare.go):

package?main

import?(

"http"

"fmt"

)

func?main(){

h?:=?http.FileServer(http.Dir("."))

var?port?string

fmt.Printf("Please?input?port?Number:?")

fmt.Scanf("%s",port)

http.ListenAndServe(":"+port,?h)???

}

運(yùn)行效果:

Go語(yǔ)言HTTPServer開(kāi)發(fā)的六種實(shí)現(xiàn)

學(xué)完了 net/http 和 fasthttp 兩個(gè)HTTP協(xié)議接口的客戶(hù)端實(shí)現(xiàn),接下來(lái)就要開(kāi)始Server的開(kāi)發(fā),不學(xué)不知道一學(xué)嚇一跳,居然這兩個(gè)庫(kù)還支持Server的開(kāi)發(fā),太方便了。

相比于Java的HTTPServer開(kāi)發(fā)基本上都是使用Spring或者Springboot框架,總是要配置各種配置類(lèi),各種 handle 對(duì)象。Golang的Server開(kāi)發(fā)顯得非常簡(jiǎn)單,就是因?yàn)樘貏e簡(jiǎn)單,或者說(shuō)沒(méi)有形成特別統(tǒng)一的規(guī)范或者框架,我發(fā)現(xiàn)了很多實(shí)現(xiàn)方式,HTTP協(xié)議基于還是 net/http 和 fasthttp ,但是 handle 語(yǔ)法就多種多樣了。

先復(fù)習(xí)一下: Golang語(yǔ)言HTTP客戶(hù)端實(shí)踐 、 Golang fasthttp實(shí)踐 。

在Golang語(yǔ)言方面,實(shí)現(xiàn)某個(gè)功能的庫(kù)可能會(huì)比較多,有機(jī)會(huì)還是要多跟同行交流,指不定就發(fā)現(xiàn)了更好用的庫(kù)。下面我分享我學(xué)到的六種Server開(kāi)發(fā)的實(shí)現(xiàn)Demo。

基于 net/http 實(shí)現(xiàn),這是一種比較基礎(chǔ)的,對(duì)于接口和 handle 映射關(guān)系處理并不優(yōu)雅,不推薦使用。

第二種也是基于 net/http ,這種編寫(xiě)語(yǔ)法可以很好地解決第一種的問(wèn)題,handle和path有了類(lèi)似配置的語(yǔ)法,可讀性提高了很多。

第三個(gè)基于 net/http 和 github.com/labstack/echo ,后者主要提供了 Echo 對(duì)象用來(lái)處理各類(lèi)配置包括接口和handle映射,功能很豐富,可讀性最佳。

第四種依然基于 net/http 實(shí)現(xiàn),引入了 github.com/gin-gonic/gin 的路由,看起來(lái)接口和 handle 映射關(guān)系比較明晰了。

第五種基于 fasthttp 開(kāi)發(fā),使用都是 fasthttp 提供的API,可讀性尚可,handle配置倒是更像Java了。

第六種依然基于 fasthttp ,用到了 github.com/buaazp/fasthttprouter ,有點(diǎn)奇怪兩個(gè)居然不在一個(gè)GitHub倉(cāng)庫(kù)里。使用語(yǔ)法跟第三種方式有點(diǎn)類(lèi)似,比較有條理,有利于閱讀。

go語(yǔ)言可以做什么

1、服務(wù)器編程:以前你如果使用C或者C++做的那些事情,用Go來(lái)做很合適,例如處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)等。

2、分布式系統(tǒng)、數(shù)據(jù)庫(kù)代理器、中間件:例如Etcd。

3、網(wǎng)絡(luò)編程:這一塊目前應(yīng)用最廣,包括Web應(yīng)用、API應(yīng)用、下載應(yīng)用,而且Go內(nèi)置的net/http包基本上把我們平常用到的網(wǎng)絡(luò)功能都實(shí)現(xiàn)了。

4、開(kāi)發(fā)云平臺(tái):目前國(guó)外很多云平臺(tái)在采用Go開(kāi)發(fā),我們所熟知的七牛云、華為云等等都有使用Go進(jìn)行開(kāi)發(fā)并且開(kāi)源的成型的產(chǎn)品。

5、區(qū)塊鏈:目前有一種說(shuō)法,技術(shù)從業(yè)人員把Go語(yǔ)言稱(chēng)作為區(qū)塊鏈行業(yè)的開(kāi)發(fā)語(yǔ)言。如果大家學(xué)習(xí)區(qū)塊鏈技術(shù)的話,就會(huì)發(fā)現(xiàn)現(xiàn)在有很多很多的區(qū)塊鏈的系統(tǒng)和應(yīng)用都是采用Go進(jìn)行開(kāi)發(fā)的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯(lián)盟鏈,兩者都有g(shù)o語(yǔ)言的版本,且go-ehtereum還是以太坊官方推薦的版本。

自1.0版發(fā)布以來(lái),go語(yǔ)言引起了眾多開(kāi)發(fā)者的關(guān)注,并得到了廣泛的應(yīng)用。go語(yǔ)言簡(jiǎn)單、高效、并發(fā)的特點(diǎn)吸引了許多傳統(tǒng)的語(yǔ)言開(kāi)發(fā)人員,其數(shù)量也在不斷增加。

使用 Go 語(yǔ)言開(kāi)發(fā)的開(kāi)源項(xiàng)目非常多。早期的 Go 語(yǔ)言開(kāi)源項(xiàng)目只是通過(guò) Go 語(yǔ)言與傳統(tǒng)項(xiàng)目進(jìn)行C語(yǔ)言庫(kù)綁定實(shí)現(xiàn),例如 Qt、Sqlite 等。

后期的很多項(xiàng)目都使用 Go 語(yǔ)言進(jìn)行重新原生實(shí)現(xiàn),這個(gè)過(guò)程相對(duì)于其他語(yǔ)言要簡(jiǎn)單一些,這也促成了大量使用 Go 語(yǔ)言原生開(kāi)發(fā)項(xiàng)目的出現(xiàn)。

go語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的簡(jiǎn)單網(wǎng)關(guān)

網(wǎng)關(guān)=反向代理+負(fù)載均衡+各種策略,技術(shù)實(shí)現(xiàn)也有多種多樣,有基于 nginx 使用 lua 的實(shí)現(xiàn),比如 openresty、kong;也有基于 zuul 的通用網(wǎng)關(guān);還有就是 golang 的網(wǎng)關(guān),比如 tyk。

這篇文章主要是講如何基于 golang 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)關(guān)。

轉(zhuǎn)自: troy.wang/docs/golang/posts/golang-gateway/

整理:go語(yǔ)言鐘文文檔:

啟動(dòng)兩個(gè)后端 web 服務(wù)(代碼)

這里使用命令行工具進(jìn)行測(cè)試

具體代碼

直接使用基礎(chǔ)庫(kù) httputil 提供的NewSingleHostReverseProxy即可,返回的reverseProxy對(duì)象實(shí)現(xiàn)了serveHttp方法,因此可以直接作為 handler。

具體代碼

director中定義回調(diào)函數(shù),入?yún)?http.Request,決定如何構(gòu)造向后端的請(qǐng)求,比如 host 是否向后傳遞,是否進(jìn)行 url 重寫(xiě),對(duì)于 header 的處理,后端 target 的選擇等,都可以在這里完成。

director在這里具體做了:

modifyResponse中定義回調(diào)函數(shù),入?yún)?http.Response,用于修改響應(yīng)的信息,比如響應(yīng)的 Body,響應(yīng)的 Header 等信息。

最終依舊是返回一個(gè)ReverseProxy,然后將這個(gè)對(duì)象作為 handler 傳入即可。

參考 2.2 中的NewSingleHostReverseProxy,只需要實(shí)現(xiàn)一個(gè)類(lèi)似的、支持多 targets 的方法即可,具體實(shí)現(xiàn)見(jiàn)后面。

作為一個(gè)網(wǎng)關(guān)服務(wù),在上面 2.3 的基礎(chǔ)上,需要支持必要的負(fù)載均衡策略,比如:

隨便 random 一個(gè)整數(shù)作為索引,然后取對(duì)應(yīng)的地址即可,實(shí)現(xiàn)比較簡(jiǎn)單。

具體代碼

使用curIndex進(jìn)行累加計(jì)數(shù),一旦超過(guò) rss 數(shù)組的長(zhǎng)度,則重置。

具體代碼

輪詢(xún)帶權(quán)重,如果使用計(jì)數(shù)遞減的方式,如果權(quán)重是5,1,1那么后端 rs 依次為a,a,a,a,a,b,c,a,a,a,a…,其中 a 后端會(huì)瞬間壓力過(guò)大;參考 nginx 內(nèi)部的加權(quán)輪詢(xún),或者應(yīng)該稱(chēng)之為平滑加權(quán)輪詢(xún),思路是:

后端真實(shí)節(jié)點(diǎn)包含三個(gè)權(quán)重:

操作步驟:

具體代碼

一致性 hash 算法,主要是用于分布式 cache 熱點(diǎn)/命中問(wèn)題;這里用于基于某 key 的 hash 值,路由到固定后端,但是只能是基本滿足流量綁定,一旦后端目標(biāo)節(jié)點(diǎn)故障,會(huì)自動(dòng)平移到環(huán)上最近的那么個(gè)節(jié)點(diǎn)。

實(shí)現(xiàn):

具體代碼

每一種不同的負(fù)載均衡算法,只需要實(shí)現(xiàn)添加以及獲取的接口即可。

然后使用工廠方法,根據(jù)傳入的參數(shù),決定使用哪種負(fù)載均衡策略。

具體代碼

作為網(wǎng)關(guān),中間件必不可少,這類(lèi)包括請(qǐng)求響應(yīng)的模式,一般稱(chēng)作洋蔥模式,每一層都是中間件,一層層進(jìn)去,然后一層層出來(lái)。

中間件的實(shí)現(xiàn)一般有兩種,一種是使用數(shù)組,然后配合 index 計(jì)數(shù);一種是鏈?zhǔn)秸{(diào)用。

具體代碼

標(biāo)題名稱(chēng):關(guān)于go語(yǔ)言http例子的信息
文章網(wǎng)址:http://sd-ha.com/article16/dsespdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站收錄、品牌網(wǎng)站制作、云服務(wù)器、建站公司靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司