sanchoo
9.03.2009, 00:15:00
Co do zapisywania adresu ip używam INET_ATON.
Piszę panel do zarządzania siecią lokalną.
Użytkownik przy pierwszym podłączeniu się do sieci zostaje przekierowany na stronę gdzie może dodać się do bazy.
Zostaje wyciągnięty adres mac i generuje ip. (Później na podstawie bazy generuje odpowiednie pliki konfiguracyjne np. httpd.conf).
Mam pewna pulę adresów ip wyznaczoną z góry.
Zrobiłem to delikatnie mówiąc "na szybko" czyli mam skrypt w php który sprawdza po kolei czy dany adres ip już jest w bazie jeśli nie to dodaje.
Ma to co najmniej 2 wady:
1. W pesymistycznej wersji (ostatni możliwy adres ip z puli) to ponad 1000 zapytań.
2. W jednej chwili mogą dodawać się 2 osoby do bazy może zdarzyć się, że 2 osoby naraz znajdą wilnego i będą próbowały się dodać.
Macie jakiś inny pomysł? Myślałem o napisaniu funkcji w mysql która by to robiła ale nie chce przenosić logiki do bazy....
shine
9.03.2009, 07:46:37
ja bym to zrobil tak, ze ustawialbym sobie 2 pola w bazie: adres_ip, oraz znacznik(wolny czy zajety), nastepnie pobieralbym selectem wszystkie ip gdzie jest znacznik "wolny" w celu zabezpieczenia sie przed ty ze ktos nas moze akurat uiec dostajac jednoczesnie ip pobieralbym np 5 pierwszych wolnych ip potem jakis foreach wszystko zamknal w transakcji, w ktorej najpierw upewnialbym sie czy przypadkiem w miedzyczasie ip sie nie zmienilo na stan "zajety" jesli nie to wtedy udate set nasze_ip i ustawienie znacznika zajetosci na 1 w przeciwnym wypadku biore kolejny z moich kilku pobranych wolnych ip i ponawiam transakcje.
blooregard
9.03.2009, 08:59:00
A nie prościej będzie zastosować blokowanie tabeli z IP ?
http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html
sanchoo
9.03.2009, 09:03:41
Nie pomyślałem o tym, dzięki.. Myślę, że coś takiego zrobię. + funkcja która w sytuacji zablokowania tableki odczeka powiedzmy 2s i spr jeszcze raz dodać...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.