2010-06-03 7 views
13

Niedawno obejrzałem film o Erlangu na InfoQ, W tym filmie jeden z twórców przedstawił, jak zastąpić zachowanie pętli komunikatów.Kod wymiany na gorąco w Erlang

Po prostu wysyłał wiadomość zawierającą lambdę nowej wersji kodu pętli komunikatów, która następnie została wywołana zamiast ponownego wywoływania starej pętli.

Czy ten kod jest wymieniany na gorąco w adresie Erlang? Czy jest to inna, bardziej natywna funkcja?

Odpowiedz

17

Tak, zamienianie na gorąco w serwerach erlang na ogół odnosi się do tej funkcji. Jest to dobrze wyjaśnione w pytaniu stackoverflow Achieving code swapping in Erlang’s gen_server, a także w tym schludny Erlang Generic Server tutorial lub this little one.

Moduł Erlang/OTP gen_server zapewnia ogólny sposób uzyskiwania funkcji "wymień się", realizując funkcję Module:code_change/3 w module zwrotnym.

W ten sposób można zaktualizować kod serwera bez wyłączania go lub wrócić do poprzedniej implementacji, jeśli coś nie działa zgodnie z oczekiwaniami. Ogólnie rzecz biorąc, hot swap powinien zostać wprowadzony przy użyciu generycznego release handler.

+1

@ bruce14 Lepszą opcją usunięcia martwego linku jest znalezienie (na stałe) zarchiwizowanej wersji –

+0

Dobre myślenie. I dobra robota! – user