Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengehadkan sambungan serentak pelanggan dalam GRPC Golang

Bagaimana untuk mengehadkan sambungan serentak pelanggan dalam GRPC Golang

WBOY
WBOYke hadapan
2024-02-08 21:24:11808semak imbas

如何限制Golang GRPC中客户端的并发连接

editor php Yuzai akan memperkenalkan kepada anda cara mengehadkan sambungan serentak pelanggan di Golang GRPC. Apabila membangun dengan Golang, kami sering menggunakan GRPC untuk komunikasi antara perkhidmatan. Walau bagaimanapun, jika dibiarkan, pelanggan mungkin mengalami prestasi yang merosot atau beban pelayan yang berlebihan disebabkan oleh terlalu banyak sambungan serentak. Oleh itu, adalah sangat penting untuk mengehadkan secara munasabah sambungan serentak pelanggan. Seterusnya, kami akan menerangkan secara terperinci cara melaksanakan sekatan dan butiran teknikal yang berkaitan.

Kandungan soalan

Saya baru dalam GRPC.

Saya ada tugasan: Saya perlu melaksanakan perkhidmatan di GRPC Golang.

Fungsi perkhidmatan:

  1. Terima imej daripada pelanggan dan simpannya.
  2. Menunjukkan senarai imej yang disimpan.

Persoalannya ialah bagaimana untuk mengehadkan sambungan serentak daripada pelanggan:

Muat turun/Simpan fail (imej) - 10 permintaan serentak.

Dapatkan senarai mesej yang disimpan - 100 permintaan serentak.

Penyelesaian

Berdasarkan ulasan anda, nampaknya anda hanya ingin menyemak bilangan panggilan yang sedang dijalankan untuk fungsi rpc tertentu. Anda boleh melakukan ini menggunakan fungsi go standard (pendekatan yang sama boleh digunakan untuk sebarang fungsi). Contohnya; sebagai kaunter dalam struktur perkhidmatan anda:

type server struct { ...
 ...
  downloadcount atomic.int32
 ...
}

Kemudian gunakannya semasa mengendalikan panggilan:

func (s *Server) Download(context context.Context, *pbpkg.DownloadRequest) (*pbpkg.DownloadRequest, error){
   inProgressCount := downloadCount.Add(1)
   defer downloadCount.Add(-1) // decrease counter when done

   if inProgressCount  > 10 {
      return nil, status.Errorf(codes.ResourceExhausted, "Download limit hit")
   }
   // Do stuff here
}

Perhatikan bahawa saya menggunakan atomic.int32;还有其他方法(sync.mutexchan dsb.), tetapi penting untuk mengambil kira keadaan perlumbaan.

Saya pasti ada cara lain (seperti ), tetapi selalunya yang mudah adalah yang terbaik!

Atas ialah kandungan terperinci Bagaimana untuk mengehadkan sambungan serentak pelanggan dalam GRPC Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam