Licznik osób online w programie

2

Witam
Chcę aby pokazywało mi informację na WWW ile osób ma aktualnie uruchomiony mój program napisany w delphi.
Jedyny jaki sposób przychodzi mi na myśl to taki, że jeżeli użytkownik uruchomi program w DELPHI, to wyśle on od razu informacje do serwera WWW poprzez synapse GETem z HWID komputera i będzie to robił co 5 minut, a skrypt w php to odbierze i będzie aktualizował w bazie danych.
Następnie będę wyświetlał informację z ostatnich 5 minut,ale jest to nieprecyzyjne rozwiązanie, ponieważ jak ktoś od razu wyłączy program,to od razu powinno być napisane , że jest off...a mimo to ciągle będzie online.

pozdrawiam i liczę na jakieś wskazówki,bo ja nie mam pomysłów.

1

To przy zamknięciu wysyłaj hwid ze zmienną np off

0
Pixello napisał(a):

To przy zamknięciu wysyłaj hwid ze zmienną np off

Również o tym myślałem, ale jak komuś np wyłączy się komp? (zwiecha) - brak prądu?

Piszę tu, bo naprawdę chcę, żeby było precyzyjne, a może ktoś będzie znał lepszy sposób.

0

Ajax co pewien odcinek czasu tak czy owak odświeża status, np czy masz nowe PW.
Zliczasz ilość wykonanych zapytań ajax'a za ostatni pewien odcinek czasu.

0

Możesz też zamiast www i getów zrobić bazę danych i zliczać połączenia. Jak ktoś zamknie aplikację/komputer to teorytycznie lista połączeń się zmniejszy.

0
woolfik napisał(a):

Możesz też zamiast www i getów zrobić bazę danych i zliczać połączenia. Jak ktoś zamknie aplikację/komputer to teorytycznie lista połączeń się zmniejszy.

Bazę danych i w programie żeby łączył się każdy użytkownik z nią? Tylko czy to nie jest niebiezpieczne trzymać dane w programie? ew. Jak mogę potem sprawdzić, kto jest połączony z bazą?

0

Bazy danych ogarniam słabo. Ale jeśli serwer który ma trzymać dane pozwala na odpalanie czegoś opartego na socketach. To wlaśnie nie wiem prosty serwerek jak dla websocketów, bo chcesz mieć coś co ogarnia połączenie live, a nie wiem jak tutaj się sprawdzi ajax, ktorego praktycznie nie znam niestety, a websockety zrobiłem tylko krótkie rozpoznanie. Ale jeśłi po stronie serwera z bazą będzie coś po TCP z czym stale będzie połaczony program, to w przypadku nawet nagłego padnięcia komputera myslę, że szybko zerwie połączenie. Można to kontrolować. Jeśli kod obsługi zapytan do bazy będzie po stronie serwera i sam user nie będzie w stanie wykonywać polecen poprzez na przykład podszycie się pod zapytanie PHP i SQL injection, to będzie to bezpieczne. Samą obslugę bazy musi mieć raczej o ile się orientuje obsługujący podłączających się programem serwer, wląsnie by w kodzie nie było żywcem zapytan, bo ktoś złosłiwy postarać się może o zreversowanie treści zapytan do bazy w kodzie exeka programu, wieć może rozwalić bazę. Tylko jeśli chcesz być super dokładny i utemperować kombinacje, to trzeba jeszcze wymysleć coś, co utrudni zwykłe połączenie się komuś i oszukiwanie licznika.

0

Nowe delphi z serii XE oraz Seatlle mają odpowiednie narzędzia do tego.... nie testowałem, ale jest gotowiec.

Jednak pewnie chcesz to zrobić ręcznie, zapomnij o pomyśle połączenia bezpośrednia aplikacji do bazy danych.

0

To chyba najlepszym pomysłem będzie to o czym pomyślałem..

0

Dane z programu możesz wysyłać nawet częściej niż co 5 minut, dlatego że cała obsługa pojedynczego zgłoszenia raczej nie będzie trwała kilku minut; Dodatkowo, tak jak napisał @Pixello, przy zamykaniu aplikacji wyślij zgłoszenie;

Martwisz się co będzie, jeśli użytkownik nagle straci połączenie, a przecież po to cyklicznie sprawdzałbyś zgłoszenia, aby sesja rozłączonego awaryjnie programu nie wisiała w nieskończoność.

0

Takie rzeczy często robi się za pomocą MQ (kolejka komunikatów) czyli tzw. publish/subscribe protocol; serwerów masz do tego od metra, np. RabbitMQ, ZeroMQ, HiveMQ, itd.
Jednym z najprostszych protokołów jest MQTT (ale mogą być inne np. STOMP), klientów dla PHP i Delphi jest od metra. Zresztą, o ile dobrze pamiętam, Facebook Messenger używa właśnie protokołu MQTT.
A dla Delphi jest klient i serwer w dwóch modułach ;-) https://github.com/pjde/delphi-mqtt
Ale czy znajdziesz brokera (serwer) napisany w czystym PHP - nie wiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1