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.
Saya baru dalam GRPC.
Saya ada tugasan: Saya perlu melaksanakan perkhidmatan di GRPC Golang.
Fungsi perkhidmatan:
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.
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.mutex
、chan
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!