Licznik osób online w programie

Licznik osób online w programie
AS
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
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.

edytowany 2x, ostatnio: Asphyxx
Pixello
  • Rejestracja:około 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Podkarpacie
  • Postów:448
1

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

AS
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
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.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 8 godzin
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 3 godziny
  • Postów:1597
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.

AS
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
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ą?

olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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.


Pozdrawiam.
woolfik
co do sql injeqtion to ja zawsze zakładam user_client na bazie i stacje klienckie mają dostęp do user_client, który może tylko zrobić select na widoku i execute na procedurach/funkcjach, reszta jest odebrana. Dzięki takiemu rozwiązaniu nawet gdybym gdzieś przeoczył w kleincie sqlinjection to privilages dla tego usera po stronie bazy załatwiają temat.
LA
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 4 godziny
  • Postów:470
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.

AS
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
0

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

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
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ść.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
flowCRANE
Ciekawe jak często sprawdzane są powiadomienia i wiadomości prywatne tu na forum;
WL
  • Rejestracja:ponad 21 lat
  • Ostatnio:8 dni
  • Postów:1083
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.