Golang, sebagai bahasa berprestasi tinggi, sentiasa digemari oleh pembangun. Dalam bidang pengaturcaraan rangkaian, Golang juga mempunyai kelebihan tersendiri, antaranya teknologi WebSocket sudah pasti salah satunya. WebSocket memudahkan untuk mencipta saluran komunikasi dua hala masa nyata. Walau bagaimanapun, dalam penggunaan sebenar, kegagalan sambungan WebSocket kadangkala berlaku. Seterusnya, mari kita bincangkan beberapa masalah biasa dengan Golang WebSocket dan penyelesaiannya.
Sambungan WebSocket gagal Ralat yang paling biasa ialah sambungan tidak bertindak balas. Keadaan ini biasanya disebabkan oleh pelayan tidak memproses permintaan pelanggan. Dalam kes ini, jika pelayan tidak mengembalikan sebarang data, pelanggan akan menunggu selama-lamanya.
Penyelesaian kepada situasi ini adalah untuk menentukan sama ada fungsi WebSocket telah dilaksanakan dengan betul. Pada masa yang sama, semak sama ada pelayan berjalan seperti biasa, sama ada port dibuka dengan betul, dsb.
Disebabkan dasar asal yang sama penyemak imbas, sambungan merentas domain WebSocket memerlukan pengendalian khas. Jika tidak, anda akan menerima ralat CORS (Cross-Origin Resource Sharing). Ralat ini bermakna pelayan tidak membenarkan permintaan untuk data daripada sumber yang berbeza. Dalam kes ini, walaupun pelanggan telah berjaya menyambung, ia akan ditutup kerana sekatan mekanisme keselamatan penyemak imbas.
Untuk menyelesaikan masalah ini, kami perlu menetapkan beberapa parameter pada pelayan. Mula-mula, tambahkan beberapa maklumat khas pada pengepala respons untuk memberitahu penyemak imbas bahawa ia boleh menerima permintaan daripada sumber tertentu. Contohnya, kod berikut boleh membenarkan permintaan daripada semua domain:
w.Header().Set("Access-Control-Allow-Origin", "*")
Selain menetapkan Access-Control-Allow-Origin
, kami juga boleh menetapkan maklumat pengepala respons lain, seperti Access-Control-Allow-Credentials
untuk memberitahu penyemak imbas sama ada untuk benarkan Hantar kuki dan maklumat lain.
Apabila menggunakan protokol WebSocket, jika anda perlu menyulitkan data yang dihantar, anda mesti menggunakan protokol SSL (Secure Sockets Layer). Apabila membuat sambungan SSL, anda mungkin menghadapi situasi di mana sijil tidak dipercayai, menyebabkan sambungan gagal. Masalah ini boleh diselesaikan dengan mengemas kini sijil.
Pada masa yang sama, kami juga boleh menyelesaikan masalah ini buat sementara waktu dengan mengabaikan semakan sijil. Walaupun penyelesaian ini boleh dilaksanakan, ia akan mengurangkan kepercayaan penyemak imbas terhadap pelayan, jadi ia hanya sesuai untuk pembangunan dan persekitaran ujian.
Semasa komunikasi WebSocket, jika pelanggan atau pelayan tidak bertindak balas atas sebab tertentu, mekanisme tamat masa akan dicetuskan. Secara lalai, tamat masa WebSocket di Golang ialah 60s.
Walau bagaimanapun, dalam beberapa kes khas, tamat masa yang lebih lama mungkin diperlukan. Untuk tujuan ini, kita boleh menetapkan parameter HandshakeTimeout
apabila membuat sambungan untuk menentukan tamat masa, contohnya:
timeOut := time.Duration(30) * time.Second wsDialer := websocket.Dialer{HandshakeTimeout: timeOut}
Semasa komunikasi WebSocket, mungkin terdapat The sambungan terputus disebabkan oleh ketidakstabilan rangkaian atau tamat masa sambungan. Jika klien atau pelayan tidak mengesan situasi ini, pihak yang satu lagi akan tetap menganggap sambungan itu sah dan akan menghadapi ralat dalam komunikasi berikutnya.
Untuk menyelesaikan masalah ini, kita boleh mengekalkan sambungan jangka panjang melalui mekanisme degupan jantung. Mekanisme degupan jantung biasanya merujuk kepada menghantar paket kosong atau tempoh data yang telah ditetapkan dalam tempoh masa tertentu untuk mengesan sama ada sambungan masih sah. Jika tiada balasan diterima, sambungan dianggap terputus dan dikendalikan dengan sewajarnya.
Di atas adalah beberapa masalah dan penyelesaian biasa dalam teknologi WebSocket Golang. Sudah tentu, masalah ini mungkin tidak muncul dalam setiap senario penggunaan, tetapi jika anda menghadapi masalah ini, kaedah yang diterangkan dalam artikel ini boleh membantu anda.
Atas ialah kandungan terperinci Apa yang perlu dilakukan jika soket web golang gagal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!