Artykuł "http implementation fasthttp in golang" od husobee wspomina:
dobrze, to jest o wiele lepsze wdrożenie kilku powodów:
- Model basen pracownik jest modelem alokacji zero, jako pracowników są już zainicjalizowane i są gotowe do wyświetlenia, podczas gdy w implementacji stdlib
go c.serve()
musi przydzielić pamięć dla goroutine.
- Model puli pracującej jest łatwiejszy do dostrojenia, ponieważ można zwiększyć/zmniejszyć rozmiar bufora liczby jednostek roboczych, które można zaakceptować, w porównaniu do modelu pożaru i zapomnienia w modelu stdlib. Model puli pracującej pozwala, aby programy obsługi były bardziej połączone z serwerem za pośrednictwem komunikacji kanałowej, jeśli serwer musi na przykład zostać zamknięty, byłby w stanie łatwiej komunikować się z pracownikami niż w implementacji stdlib.
- Podpis podpowiedzi funkcji treser jest lepszy, ponieważ przyjmuje tylko kontekst obejmujący zarówno żądanie, jak i program piszący potrzebny do obsługi. jest to SZCZEGÓLNIE lepsze od standardowej biblioteki, ponieważ wszystko, co dostajesz ze stdlib, jest pisarzem żądania i odpowiedzi ... Praca w go1.7 w celu uwzględnienia kontekstu w żądaniu jest raczej hackem, aby dać ludziom to, czego naprawdę chcą (kontekst) bez rozbijania nikogo.
Ogólnie lepszym rozwiązaniem jest napisanie serwera z modelem puli pracującej do obsługi żądań, w przeciwieństwie do tworzenia "wątku" na żądanie, bez możliwości dławienia po wyjęciu z pudełka.
Główny powód: fasthttp to ** nie ** pełna implementacja protokołu HTTP. fasthttp może być wystarczająco dobre dla większości rzeczy HTTP, ale nie dla wszystkiego. – Volker
@Volker ... Czy możesz powiedzieć jakie rzeczy zostały pominięte w fasthttp –
Na początek, brak obsługi http/2 https://github.com/valyala/fasthttp/issues/144 – nishanths