PHP Soket Programlama

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    x-t0xid
    x-t0xid's avatar
    Kayıt Tarihi: 12/Ağustos/2015
    Erkek

    Selamlar arkadaşlar ufak bir problemim var bu problem socket ile alakalı ve php bilgim hiç yok denilebilecek kadar az. Python bir scriptim var bu python scripti uzaktan veri alıp socket yardımı ile clientlara dağıtıyor buraya kadar hiç bir sıkıntı yok. Client tarafı php olacak karaladım bir şeyler fakat bir problemim var. Öncelikle PHP kodlarını paylaşıyım.

     

    Özet: PHP'de socket programlama ile uğraşırken gelen verinin hepsini tek seferde nasıl alabilirim? 

     

    <?php
    
    
    $ip = '**********';
    $port = 8480;
    
    // Auth
    //$username = "test\n";
    //$password = "test\n";
    //$apikey   = "test123\n";
    
    	if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
    	{
    		$hatakodu = socket_last_error();
    		$hatamesaji = socket_strerror($hatakodu);
    
    		die("Socket oluşturulamadı! [$hatakodu] $hatamesaji \n");
    	}
    
    	if(!socket_connect($sock, $ip, $port))
    	{
    		$hatakodu = socket_last_error();
    		$hatamesaji = socket_strerror($hatakodu);
    
    		die("Sunucuya Bağlanılamadı! [$hatakodu] $hatamesaji \n");
    	}
    /*
    	Strip
    */
    	while(0x1)
    	{
    		if(socket_recv($sock, $buf, PHP_NORMAL_READ, MSG_WAITALL) === FALSE)
    		{
    			$hatakodu = socket_last_error();
    			$hatamesaji = socket_strerror($hatakodu);
    
    			die("Veri Alinamadi! [$hatakodu] $hatamesaji \n");
    		}
    
    		echo $buf;
    	}
    ?>
    



    Sürekli olarak veriler güncellendiği için tutup recv  fonksiyonunu while döngüsünün içine aldım ne kadar verimli olur hiç bilmiyorum iş göreceğini düşünüyorum çünkü ahım şahım bir data akışı olmayacak. Probleme gelicek olursak. Servera nc, veya farklı bir dilde yazdığım client ile bağlanınca çok hızlı bir şekilde veriyi alabiliyorum. Fakat PHP'de böyle bir şey yapamadım veriyi 2-3 saniyede ve parça parça alabiliyorum bunun sebebi recv için kullanmış olduğum PHP_NORMAL_READ parametresinin sebep olduğunu düşünüyorum. Buraya manuel ile 2048 gibi okunacak bayt sayısını yazdığım zaman sıkıntı çıkmıyor fakat gelen datanın uzunluğu çok değişken olduğu için bazen yarım geliyor bazen ise çok aşırı gelip bekliyo php.

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Daft Ground
    PLaXToR
    PLaXToR's avatar
    Kayıt Tarihi: 08/Temmuz/2003
    Erkek

    Yarım gelmesinin sebebi Buffer kullanmaman hocam, ufak contentler için tamam ama, ufak contentler için bile buffer kullanmalısın yoksa ne gelirse onu parçık puncuk gönderiyor.


    If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
Toplam Hit: 984 Toplam Mesaj: 2
php socket