Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> czy musze poling owac bazę aby mieć atualne dane?, czy jest sposób na asynchroniczny?
mrowka72
post 4.04.2006, 16:37:59
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


mam clip flash dzięki któremu odpytuję bazę co 1 s
tzn odpytuję plik.php
on wykonuje zapytanie na bazie
SELECT kolor from kolory where id =1;
Czy można zrobić tak , że wyslę zapytanie a odpowiedź uzyskam jak zmieni się wartość w bazie?
aki poling przecierz żdżera zasoby
we flaschu jest zdarzenie onData zatem zaczekałby za odpowiedzią
myslę że pomocnym mógłby być jakiś triger lub wyzwalacz.
proszę o pomoc!
Go to the top of the page
+Quote Post
elessar
post 5.04.2006, 12:16:58
Post #2





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 12.05.2003
Skąd: Mikołów

Ostrzeżenie: (0%)
-----


Nie mozesz czegos takiego zrobic.
ps. Trigger a wyzwalacz to to samo.


--------------------
..::elessar::..
Go to the top of the page
+Quote Post
Vogel
post 5.04.2006, 12:31:32
Post #3





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

Ostrzeżenie: (0%)
-----


tiggery to jedyne rozwiazanie.

hmm... czyzbys robil phpowo-flashowy czat?

jesli tak to garsc rad:
1) zrezygnuj z "zapytywania co 1s" bo to bezsensu
2) zainteresuj sie php CLI (command-line)
3) zainteresuj sie socketami w php
4) flash MOŻE nawiązywać stałe połaczenia (xmlsocket)

mozesz wiec napisac prosta aplikacje dla php CLI, ktora bedzie nasluchiwala na okreslonym porcie. flashyk przy pomocy laczy sie z twoim serwerem. pakiety slesz gdy MASZ co wysylac, oszczedzasz czas, zapytania i wydajnosc.

jak dotre do domu to moze nawet odgrzebie zrodla ;] testowalem na 2 kompach (via internet) i spokojnie obslugiwalo 100 polaczen (serwerek 128kpbs). a wymagania php CLI sa malutkie ;D


--------------------
Go to the top of the page
+Quote Post
elessar
post 5.04.2006, 12:40:12
Post #4





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 12.05.2003
Skąd: Mikołów

Ostrzeżenie: (0%)
-----


@Vogel a moglbys napisac jak chcesz sprawdzic czy cos sie w bazie nie zmienilo?

Jedyne co mi przyszlo do glowy to napisac wlasnego UDF ktory bylby w triggerze odpalany i on by nadawal do serwera ktory by sobie zapamietywal czas ostatniej zmiany. Ale to jest dobre tylko jak ma sie wlasny serwer. No a pozatym to trzeba miec troche wiedzy smile.gif


--------------------
..::elessar::..
Go to the top of the page
+Quote Post
Vogel
post 5.04.2006, 12:47:58
Post #5





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

Ostrzeżenie: (0%)
-----


a od czego Sesje? zapamietujesz w niej date ostatnieog wywolania skryptu i tej daty uzywasz przy jego kolejnym wykonaniu.


--------------------
Go to the top of the page
+Quote Post
elessar
post 5.04.2006, 13:13:23
Post #6





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 12.05.2003
Skąd: Mikołów

Ostrzeżenie: (0%)
-----


@vogel, Ale biega o to zeby te kolejne wywolanie bylo w momencie zmiany/dodania nowych danych do bazy. Wiec nie rozumie co ma do tego sesja? Co z tego ze uzyjesz daty ostatniego wywolania jak i tak musisz przepytac baze.

@mrowka72, Chodzi mi po glowie pare pomyslow jak to inaczej zrobic, ale musisz napisac dokladnie do czego to ma sluzyc :-)


--------------------
..::elessar::..
Go to the top of the page
+Quote Post
Vogel
post 5.04.2006, 13:22:49
Post #7





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

Ostrzeżenie: (0%)
-----


eee... moment. nie rozumiemy sie.

przedstawilem prosty sposob na obejscie tego problemu - polaczenia stale. i nie, nie musze przepytywac bazy - generalnie nie potrzebuje do tego ŻADNEJ bazy (chyba ze ktos chce to zapisywac). po prostu jesli klient wysyla zapytanie do serwera to serwer rozsyla to do pozostalych userow z ktorymi ma polaczenie. i wuala. polaczenia stale.


--------------------
Go to the top of the page
+Quote Post
mrowka72
post 6.04.2006, 12:23:05
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


dzięki ci @Vogel twoje pomycły są ekstra!
jusz śpieszę z wyjasnieniem przeznaczenia aplikacji

mam termometr i parę innych czujników podpiętych pod port kompa zrobiłem programik w VB aby ich wartości zapisywał w bazie MySQL będącej na tym samym kompie (jest tam i Apache) i...
teraz chciąłbym podglądać je przez internet na PDA
zrobiłem fajny interfeis we flahu tyle że te zmiany w termometrze czasami są szybkie (5 razy na s) a czasami przez godinę się ic nie zmienia .
w VB do bazy wysyłam tylko jak się zmiena ale od strony flasha musiałem pingować bazę .

PS. bardzo podoba mi się pomysł z "polaczeniem stałym" tylko by musiął mnie ktoś oświecić lub naprowadzić na jakiś tutroial
Go to the top of the page
+Quote Post
LBO
post 6.04.2006, 12:53:34
Post #9





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


wykorzystaj pomysl ~VOGEL, a programik VB niech nie zapisuje do bazy wynikow tylko wyrzuca na socketa (prosto do flashyka biggrin.gif)

edit: w sumie mozna sie obejsc bez MySQL i bez php...

Ten post edytował LBO 6.04.2006, 12:55:12
Go to the top of the page
+Quote Post
mrowka72
post 6.04.2006, 13:40:04
Post #10





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


ok więc proszę o jakies namiary na temat socket w flash i php
Clip flasha musi być na stronie

znalazlem coś takiego dla flasha: a co ma być po stronie vb?
To to jestem zielony jak wiosna

x = [];
for( var i =0; i<50; i++)
{
x[i] = new XMLSocket();
x[i].n = i;
x[i].onConnect = function(s)
{
if( s )
{
this.connected = true;
this.onData = function( m )
{
if( m == '' ) return;
var dt = getTimer() - m;
trace( '['+this.n+'] <- '+m+'( LAG:'+dt+' )' );
}
}
}
x[i].connect( "192.168.2.15", 1819 );
}
this.i = 0;

this.onEnterFrame = function()
{
if( x[this.i].connected )
{
var m = getTimer();
trace( '['+this.i+'] -> '+m );
x[this.i].send( m+'\0' );
}
this.i = this.i == 49 ? 0 : this.i+1;
}
Go to the top of the page
+Quote Post
LBO
post 6.04.2006, 14:06:09
Post #11





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


pogooglowac troche...


moze to sie przyda?

edit: powyzszy link, moze nie rozwiazac twojego problemu... reason? nie znam VB

Ten post edytował LBO 6.04.2006, 14:06:52
Go to the top of the page
+Quote Post
Vogel
post 6.04.2006, 14:11:14
Post #12





Grupa: Zarejestrowani
Postów: 402
Pomógł: 0
Dołączył: 20.01.2003

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3.  
  4.  
  5. $address = '127.0.0.1';
  6. $port = 23456;
  7.  
  8. $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  9. socket_set_nonblock($sock);
  10. socket_bind($sock, $address, $port);
  11. socket_listen($sock, 5);
  12.  
  13. function wyslijDoReszty($resources,$buf,$msgsock = NULL) {
  14. $buf .= chr(0);
  15. foreach($resources as $soc) {
  16.  if ($soc && ($msgsock == $soc || !$msgsock)) {
  17.  if (@socket_write($soc,$buf,strlen($buf)) == false) {
  18. getError($soc);
  19.  }
  20.  }
  21. }
  22. }
  23.  
  24. function getError($socketID) {
  25. $key = array_search($socketID, $GLOBALS['resources']);
  26. unset($GLOBALS['resources'][$key]);
  27. print $socketID." rozlaczono\n";
  28. }
  29.  
  30. print "serwer uruchomiono ".$address.":".$port."\n";
  31.  
  32. $resources = array();
  33. do {
  34. if ($c = @socket_accept($sock)) {
  35.  print "NEW CONNECTION...".$c."\n";
  36.  $msg = "Witaj... ".$c."\n".chr(0);
  37.  socket_write($c, $msg, strlen($msg));
  38.  $resources[] = $c;
  39.  unset($c);
  40. }
  41. $buf = array();
  42. reset($resources);
  43. foreach($resources as $msgsock) {
  44. if ($buf = trim(@socket_read($msgsock, 2048))) {
  45. if ($buf == 'info') {
  46. $buf = "-------------- POLACZENIA:\n".print_r($resources,true)."Ilosc polaczen: ".count($resources)."\n";
  47.  wyslijDoReszty($resources,$buf,$msgsock);
  48. print "-------------- wywolano INFO przez ".$msgsock."\n";
  49. print_r($resources);
  50. print_r("Ilosc polaczen: ".count($resources));
  51. }
  52. elseif ($buf == 'shutdown') {
  53. $buf = "-------------- SERWER WYLACZONO!\n";
  54. wyslijDoReszty($resources,$buf);
  55. reset($resources);
  56. foreach($resources as $msgsock) {
  57. @socket_close($msgsock);
  58. }
  59. print "-------------- serwer zamkniety przez ".$msgsock;
  60. }
  61. else {
  62. $buf = $msgsock.": ".$buf;
  63. wyslijDoReszty($resources,$buf);
  64. }
  65. }
  66. unset($buf);
  67. }
  68. //usleep(2000);
  69.  
  70. } while (true);
  71.  
  72. socket_close($sock);
  73.  
  74. ?>


+ flashowy klient (.exe)
+ źródło klient (flash 8.0)

1. odpalamy serwer ("php nazwaskryptu.php")
2. odpalamy klienta flash i sie laczymy
3. odpalamy drugiego klienta flash i sie laczymy
4. piszemy do siebie ;] lol

Ten post edytował Vogel 7.04.2006, 09:37:28


--------------------
Go to the top of the page
+Quote Post
mrowka72
post 6.04.2006, 15:35:16
Post #13





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 9.06.2005

Ostrzeżenie: (0%)
-----


Wielkie dzięki coś z tego wystrugam

do zobaczenia jutro
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 11:27