Rumah >pembangunan bahagian belakang >Golang >Pelaksanaan pelayan websocket menggunakan perpustakaan x/net trowing 403
PHP Editor Banana akan memperkenalkan anda kepada kaedah menggunakan perpustakaan x/net untuk melaksanakan pelayan Websocket yang menimbulkan ralat 403. Websocket ialah protokol komunikasi yang mewujudkan sambungan berterusan antara pelanggan dan pelayan, dan ralat 403 bermakna pelayan menolak permintaan pelanggan. Dengan menggunakan perpustakaan x/net, kami boleh membuat pelayan Websocket dengan mudah dan menolak permintaan dengan membuang ralat 403 apabila diperlukan. Kaedah ini mudah dan berkesan serta sesuai untuk senario di mana permintaan perlu dibenarkan atau akses terhad.
Saya cuba melaksanakan pelayan soket web menggunakan x/net/websocket
perpustakaan standard.
Percubaan saya setakat ini adalah seperti berikut:
package main import ( "fmt" "net/http" "golang.org/x/net/websocket" ) type Server struct { baseUri string connections map[string][]*websocket.Conn } func initServer(baseUri string) *Server { return &Server{ baseUri: baseUri, } } func (server *Server) handleConnections() { http.Handle("/ws", websocket.Handler(server.listenConnections)) http.ListenAndServe(":3000", nil) } func (server *Server) listenConnections(ws *websocket.Conn) { fmt.Println("New connection established") for { fmt.Println("FOO") } } func main() { server := initServer("/ws") server.handleConnections() }
Cuba gunakan berbilang pelanggan ws untuk menyambung ke ws://localhost:3000/ws
时,我总是收到相同的错误:403-Forbidden
.
Saya juga mencuba contoh dari dokumentasi rasmi tetapi masih mendapatnya. Adakah saya kehilangan sesuatu yang jelas? Seperti penyekatan pelabuhan lalai atau sesuatu seperti itu?
Terima kasih terlebih dahulu.
EDIT: Anda mungkin perlu menggunakan port lain untuk menghasilkan semula isu tersebut. Menggunakan 3000
dalam contoh saya hanya akan mengganggu pelaksanaan program jika ia tidak tersedia.
Edit 2: Anda boleh menggunakan klien seperti websocat dan laksanakan websocat 'ws://localhost:3000/ws'
untuk cuba menyambung ke pelayan
Saya menyerah, tetapi mempunyai pandangan yang baik: Jika anda seperti saya dan anda mengikuti Walkthrough Anthony GG untuk Mencipta Pelayan Websocket on Go from Scratch , jangan. Video sudah lapuk, dan walaupun ia memberikan intuisi yang baik tentang cara mencipta video, adalah lebih baik (dan tidak malu) untuk belajar menggunakan perpustakaan soket web gorila.
package main import ( "fmt" "net/http" "time" "github.com/gorilla/mux" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } type Server struct { baseUri string connections map[string][]*websocket.Conn router *mux.Router setup *http.Server } func initServer(baseUri string) *Server { router := mux.NewRouter() return &Server{ baseUri: baseUri, router: router, setup: &http.Server{ Handler: router, Addr: "127.0.0.1:8000", WriteTimeout: 15 * time.Second, ReadTimeout: 15 * time.Second, }, } } func (server *Server) handleConnections() { server.router.HandleFunc("/ws/{var}", server.listenConnections) server.setup.ListenAndServe() } func (server *Server) listenConnections(w http.ResponseWriter, r *http.Request) { connection, err := upgrader.Upgrade(w, r, nil) if err != nil { fmt.Println(err) return } for { _, message, err := connection.ReadMessage() if err != nil { break } connection.WriteMessage(websocket.TextMessage, message) go messageHandler(message) } fmt.Println("Out of loop") } func messageHandler(message []byte) { fmt.Println(string(message)) } func main() { server := initServer("/ws") server.handleConnections() }
Saya juga menggunakan gorilla/mux
untuk menggunakan parameter laluan (tidak pasti mengapa pengendali http tidak boleh).
Perhatikan cara saya menambah http.Handle
更改为 mux.Router.HandleFunc
.
Seperti yang ditunjukkan oleh pengguna @Cerise dalam ulasan, pakej x/net/websocket
包不在标准库中,但仅添加 Origin
tiada dalam pustaka standard, tetapi hanya menambah pengepala Origin
tidak menyelesaikan masalah asal sama ada.
Semoga ini dapat menyelamatkan beberapa masalah orang lain seperti saya yang ingin belajar Go.
Atas ialah kandungan terperinci Pelaksanaan pelayan websocket menggunakan perpustakaan x/net trowing 403. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!