TCP Websocket PHP Sorunsalı[ÇÖZÜLDÜ]
-
Hocalarım şöyle bir sorunum var.. TCP socket kullanıyorum(Kullanmak zorundayım) ve bu socket içerisinden gelen verileri fread(..) fonksiyonu ile okuyorum..
Fakat 1 defa fread yapabiliyorum tek bir php dosyası içerisinde...
Push Notification gibi düşünün.. Fread komutuna veri geldiğinde benim yazdığım kodlar calıssın istiyorum fakat yapamadım...
Yani şöyle ki..
$socket = stream_socket_client("tcp://....:$Port",$errno,$errstr, 5); if (!$socket){ echo "$errstr ($errno)\n"; exit(); } $params = array( "username" => $password, "password" => $username ); fwrite($socket, json_encode($params).STANZA_BREAK); $result = fread($socket, 4096); //echo $result; $result = json_decode($result); if($result->status != "success"){ echo "LOGIN BASARISIZ: $result->status: $result->message\n"; fclose($socket); exit(); } $result = fread($socket, 4096); $result = json_decode($result); print_r($result);Buradaki kod bloğunda $result'u tek seferlik print ediyorum.. Yani socket'den gelen veriyi 1 defaya mahsus okuyorum... Bu dosya calıstıgında socket'den bana merhaba dünya geliyor.. Fakat Nasılsın diye bir veri daha geldiğinde onu ben recieve edemiyorum . Tekrar bu sayfayı yüklemem gerekiyor 2. veriyi almam için...
Benim Fread fonksiyonunu asenkron çalıştırmam gerekiyor sanırım fakat çözemedim nasıl olacak gibisinden ...
Istediğim şey şu...
while(true) { $result=$fread($socket,4096); echo "<script>alert('Veri Geldi -> '".$."</script> }Burada her seferinde okuyorum ama Php tek sefer sayfayı yüklediğinden dolayı yemiyor...
Şunu da denedim..
<script> while(true) { console.log("Data GEdiliyor"); $.ajax ({ type : "POST", async: false, url:'Socket.php', success :function(data) { alert(data); } }); } </script>Burda da Sonsuz döngüde o php dosyasını çağırıyorum.. Işim görülüyor. Ama Saçmalığın daniskası bu yaptığım işlem :((( Benim ne yapmam gerekiyor ??
Umarm anlatabilmişimdir derdimi..
Iyi forumlar
ÇÖZÜM
Arka planda bana gelen veriyi dinliyorum php script ile . Gelen verileri de bir başka socket'ile kendi serverıma post ediyorum..Bu şekilde veriyi işliyorum Ajax vs yazmadım arkada full time calsan bir script olacak.
MhmdAlmz tarafından 24/Oca/17 15:54 tarihinde düzenlenmiştir -
http://www.binarytides.com/php-socket-programming-tutorial/
Aşağılara doğru Live Server kısmı var orayı incele.
Bu PHP dosyasını direkt olarak web browserdan cağıramazsın. Browser tek bir istek yollar ve server o isteği yorumlayıp sana cevap döndürür.
Sunucu üzerinden console'dan çağırman gerek.
$ php /var/www/server.php
-
Ama bu php dosyasından gelen cevap benim X Sayfamı tetikleyecek . Ve bu sayfa içerisinde session işlemleri vs de var HTTP içerisinde çağırmam gerekiyor...
Mesela ben Serverdan bildirim gönderdim buraya . Bu bildirimi de X Kullanıcının ekranında göstereceğim.. Fakat nasıl ? Sadece 1 kere yorumlanıyor.
-
https://github.com/nekudo/php-websocket
Javascript WebSocket ile sunucuna bağlanman gerekiyor.
Sunucu ise direkt olarak o kullanıcıya mesaj yollayacaktır. Böylelikle canlı veri akışı sağlayabilirsin.
WebSocket'ten gelen bilgiyi js ile işleyip ekrana bildirim de gösterirsin, oyun da oynatırsın.
-
Server dışarıda hocam Bir Verimor (Santral) deki websocket'i dinliyorum..
Bu socketten bana koutlar geliyor bunu recieve edemiyorum..
JavaScript ile bağlantı yok socket'e sadece php var sanırım. Zaten JavaScript ile bağlanamam çünkü kullanıcı adı ve şifre gözükür..
-
Anaaaa düşmüş
-
Dediğin iş bu şekilde olmaz (olmamalı). PHP buna uygun değil. Sana daemon lazım. Kimden nereye ne yollayacağını öğrensem fikir vereceğim ama neyse.
while(true) { $result=$fread($socket,4096); echo "<script>alert('Veri Geldi -> '".$."</script> } -
Dediğin iş bu şekilde olmaz (olmamalı). PHP buna uygun değil. Sana daemon lazım. Kimden nereye ne yollayacağını öğrensem fikir vereceğim ama neyse.
while(true) { $result=$fread($socket,4096); echo "<script>alert('Veri Geldi -> '".$."</script> }https://stackoverflow.com/questions/3133209/how-to-flush-output-after-each-echo-call adresine bak yukarıda yazdığın için.
-
şöyle son bir up olsun ...
