Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bincangkan cara menggunakan Golang untuk melaksanakan latihan pusingan panjang

Bincangkan cara menggunakan Golang untuk melaksanakan latihan pusingan panjang

PHPz
PHPzasal
2023-04-21 14:20:46713semak imbas

Golang ialah bahasa yang cekap dan berkuasa yang digunakan secara meluas dalam bidang pengaturcaraan rangkaian. Latihan putaran panjang ialah teknologi yang digunakan secara meluas yang boleh mencapai pemesejan segera, sembang dan fungsi lain dengan mengekalkan sambungan untuk masa yang lama. Dalam artikel ini, kita akan membincangkan cara melaksanakan latihan pusingan panjang menggunakan Golang.

1. Apakah itu latihan putaran panjang

Latihan putaran panjang ialah teknologi WEB yang berkait rapat dengan protokol HTTP. Idea teras latihan pusingan panjang adalah untuk mengekalkan sambungan antara pelanggan dan pelayan untuk tempoh masa untuk menghantar data dalam masa nyata. Kaedah pelaksanaan ini tidak seperti kaedah permintaan HTTP tradisional, yang memerlukan klien menghantar permintaan secara aktif kepada pelayan Sebaliknya, pelayan menghantar data kepada klien pada masa lapangnya.

Latihan putaran panjang boleh digunakan untuk melaksanakan sembang masa nyata, permainan dalam talian dan aplikasi lain kerana ia boleh menyediakan pemberitahuan masa nyata dan fungsi penghantaran data tanpa gangguan. Di Golang, anda boleh menggunakan goroutine dan saluran untuk melaksanakan fungsi latihan pusingan panjang.

2. Pelaksanaan latihan jangka panjang Golang

  1. Pelaksanaan sisi pelayan

Pertama, kita perlu mencipta pelayan HTTP supaya pelanggan boleh menyambung kepadanya dan Lakukan putaran yang panjang. Sangat mudah untuk melaksanakan pelayan HTTP menggunakan pakej net/http Golang:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/longpolling", longPollingHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func longPollingHandler(w http.ResponseWriter, r *http.Request) {
    // 实现长轮训逻辑
}

Seterusnya, kita perlu melaksanakan logik latihan pusingan panjang. Di sini kami menggunakan dua goroutine, satu untuk mengendalikan permintaan pelanggan dan satu lagi untuk menghantar data kepada pelanggan.

func longPollingHandler(w http.ResponseWriter, r *http.Request) {
    // 首先,我们创建一个通道用于接收数据
    ch := make(chan string)

    // 开启一个goroutine用于处理客户端请求
    go func() {
        for {
            // 阻塞等待,直到有数据可读
            data := <-ch
            fmt.Fprint(w, data)
            return
        }
    }()

    // 开启一个goroutine用于发送数据到客户端
    go func() {
        for {
            // 模拟发送数据到客户端
            data := "long polling data"
            ch <- data
        }
    }()
}

Kod di atas melaksanakan logik latihan pusingan panjang Idea khusus ialah: mula-mula buat saluran untuk menerima data, dan hantar data secara berterusan dalam satu goroutine yang lain, Sekat dan tunggu data dalam saluran, dan kembalikan data kepada klien apabila terdapat data.

  1. Pelaksanaan pelanggan

Di pihak pelanggan, kami melaksanakan latihan sepanjang masa melalui permintaan HTTP. Kita perlu terlebih dahulu menghantar permintaan kepada pelayan dan kemudian menunggu jawapan pelayan:

function longPolling() {
  $.ajax({
    url: "/longpolling",
    success: function(data) {
      console.log(data);
      longPolling();
    },
    timeout: 30000
  });
}

longPolling();

Dalam kod di atas, kami menggunakan fungsi $.ajax jQuery, yang akan menghantar permintaan HTTP ke pelayan dan Jalankan fungsi panggil balik selepas menerima respons. Dalam fungsi panggil balik, kami akan mendapatkan data yang dihantar oleh pelayan, dan memanggil fungsi longPolling sekali lagi selepas mengeluarkan data untuk menunggu respons seterusnya.

Kami menggunakan pilihan timeout untuk menentukan tamat masa Jika masa menunggu melebihi 30 saat, pelanggan akan memutuskan sambungan secara automatik dan menghantar semula permintaan.

3. Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan Golang untuk melaksanakan fungsi latihan putaran panjang. Putaran panjang ialah teknik hebat yang membolehkan pemindahan data masa nyata antara aplikasi yang berbeza. Di Golang, sangat mudah untuk menggunakan goroutine dan saluran untuk melaksanakan fungsi latihan pusingan panjang Untuk kod pelanggan, kami menggunakan fungsi $.ajax jQuery untuk menghantar permintaan HTTP. Saya harap artikel ini akan membantu anda belajar dan menguasai latihan putaran panjang.

Atas ialah kandungan terperinci Bincangkan cara menggunakan Golang untuk melaksanakan latihan pusingan panjang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn