


Cara melaksanakan pengesanan degupan jantung Websocket menggunakan bahasa Go
Cara menggunakan bahasa Go untuk melaksanakan pengesanan degupan jantung Websocket
Websocket ialah protokol yang melaksanakan komunikasi dua hala dalam aplikasi web Ia membolehkan pelayan menolak data secara aktif kepada pelanggan. Dalam sesetengah aplikasi dengan keperluan masa nyata yang tinggi, kami mungkin perlu memantau status pelanggan dalam masa nyata untuk memastikan kestabilan sambungan. Untuk mencapai matlamat ini, kita boleh menggunakan mekanisme pengesanan degupan jantung.
Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan pengesanan degupan jantung Websocket dan memberikan contoh kod khusus.
Pertama, kita perlu menggunakan pakej websocket bahasa Go untuk mencipta pelayan WebSocket. Di bahagian pelayan, kami boleh menggunakan pakej github.com/gorilla/websocket
untuk melaksanakan komunikasi WebSocket. Pakej ini boleh dipasang menggunakan arahan berikut: github.com/gorilla/websocket
包来实现WebSocket通信。可以使用以下命令来安装这个包:
go get github.com/gorilla/websocket
在Go语言中,我们可以使用http.ListenAndServe
函数来创建一个简单的WebSocket服务器。以下是一个实例:
package main import ( "fmt" "log" "net/http" "time" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func echo(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() for { // 读取客户端发送的消息 _, msg, err := conn.ReadMessage() if err != nil { log.Println(err) break } // 打印接收到的消息 fmt.Println("Received:", string(msg)) // 回复客户端消息 err = conn.WriteMessage(websocket.TextMessage, []byte("Received: "+string(msg))) if err != nil { log.Println(err) break } } } func main() { http.HandleFunc("/ws", echo) log.Println("WebSocket server started on localhost:8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
这个示例中的echo
函数用于处理WebSocket连接,并实现了消息的接收和回复。我们可以使用http.HandleFunc
函数将这个函数与路径/ws
关联起来。
接下来,我们需要在客户端实现心跳检测功能。我们可以使用JavaScript的setInterval
函数周期性地向服务器发送心跳消息,并在一段时间内没有接收到服务器回复时,进行重连。以下是一个简单的JavaScript代码示例:
var socket = new WebSocket("ws://localhost:8080/ws"); var pingInterval = null; socket.onopen = function() { console.log("Websocket connected"); // 每隔5秒发送心跳消息 pingInterval = setInterval(function() { socket.send("ping"); }, 5000); } socket.onmessage = function(event) { console.log("Received:", event.data); // 收到服务器回复后重置心跳计时器 clearInterval(pingInterval); pingInterval = setInterval(function() { socket.send("ping"); }, 5000); } socket.onclose = function(event) { console.log("Websocket closed"); // 连接关闭后清除心跳计时器 clearInterval(pingInterval); }
在这个示例中,我们首先创建WebSocket连接,然后使用onopen
函数来设置心跳计时器。每隔5秒钟向服务器发送一个ping
rrreee
http.ListenAndServe
untuk mencipta pelayan WebSocket yang ringkas. Berikut ialah contoh: rrreee
Fungsiecho
dalam contoh ini digunakan untuk mengendalikan sambungan WebSocket dan melaksanakan penerimaan dan balasan mesej. Kita boleh menggunakan fungsi http.HandleFunc
untuk mengaitkan fungsi ini dengan laluan /ws
. 🎜🎜Seterusnya, kita perlu melaksanakan fungsi pengesanan degupan jantung pada klien. Kami boleh menggunakan fungsi setInterval
JavaScript untuk menghantar mesej degupan jantung secara berkala ke pelayan dan menyambung semula apabila tiada balasan diterima daripada pelayan untuk satu tempoh masa. Berikut ialah contoh kod JavaScript yang mudah: 🎜rrreee🎜 Dalam contoh ini, kami mula-mula membuat sambungan WebSocket dan kemudian menggunakan fungsi onopen
untuk menetapkan pemasa degupan jantung. Hantar mesej ping
ke pelayan setiap 5 saat. Apabila kami menerima balasan daripada pelayan, kami menetapkan semula pemasa degupan jantung. Jika sambungan ditutup kami mengosongkan pemasa. 🎜🎜Di atas ialah langkah asas dan contoh kod untuk melaksanakan pengesanan degupan jantung WebSocket menggunakan bahasa Go. Dengan cara ini, kami boleh memantau status pelanggan dalam masa nyata dan memastikan kestabilan sambungan. Harap artikel ini dapat membantu anda! 🎜Atas ialah kandungan terperinci Cara melaksanakan pengesanan degupan jantung Websocket menggunakan bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Mengapa lelaran peta di GO menyebabkan semua nilai menjadi elemen terakhir? Dalam bahasa Go, ketika berhadapan dengan beberapa soalan wawancara, anda sering menemui peta ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...
