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

Bagaimana untuk mengehadkan sambungan serentak pelanggan dalam GRPC Golang

WBOY
Lepaskan: 2024-02-08 21:24:11
ke hadapan
831 orang telah melayarinya

如何限制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
 ...
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan