本文目錄一覽:
golang一個埠怎麼同時提供http和https
1、首先使用一個公共的埠作為監聽,讓HTTP和HTTPS服務分別監聽在各自的埠上。
2、其次在公共埠服務區分這是HTTP請求還是HTTPS請求。
3、最後各自轉發到所服務的監聽即可。
Golang 埠轉發工具
初學go,寫一個埠轉發工具。很方便的小工具,希望能對大家學習go語言有所幫助。
“`Golang
package main
import(
“fmt”
“io”
“net”
“sync”
)
varlocksync.Mutex
vartrueList[]string
varipstring
varliststring
funcmain(){
ip=”0.0.0.0:888″
server()
}
funcserver(){
fmt.Printf(“Listening%s”,ip)
lis,err:=net.Listen(“tcp”,ip)
iferr!=nil{
fmt.Println(err)
return
}
deferlis.Close()
for{
conn,err:=lis.Accept()
iferr!=nil{
fmt.Println(“建立連接錯誤:%v\n”,err)
continue
}
fmt.Println(conn.RemoteAddr(),conn.LocalAddr())
gohandle(conn)
}
}
funchandle(sconnnet.Conn){
defersconn.Close()
ip:=”127.0.0.1:8888″
dconn,err:=net.Dial(“tcp”,ip)
iferr!=nil{
fmt.Printf(“連接%v失敗:%v\n”,ip,err)
return
}
ExitChan:=make(chanbool,1)
gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){
io.Copy(dconn,sconn)
ExitChan-true
}(sconn,dconn,ExitChan)
gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){
io.Copy(sconn,dconn)
ExitChan-true
}(sconn,dconn,ExitChan)
-ExitChan
dconn.Close()
}
Golang gRPC實現內網穿透
內網穿透即是使用公網伺服器作為代理,轉發內網(如辦公室、家裡)的網路請求使其能夠在外網中被訪問到。
server端監聽兩個埠,一個用來和接收用戶的http請求,一個監聽gRPC客戶端,和內網伺服器進行通信;
client啟動時連接server端;
當User請求server http埠時,將http進行阻塞,並將User請求內容通過gRPC發給client;
client將從server收到的請求發往本地的http服務;
client將從本地程序收到的http response通過gRPC發送給server;
server結束http阻塞,將從client收到的http response發給User。
github地址:
原創文章,作者:WHEQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/146838.html