Форумы портала PHP.SU » » HTTP и PHP » php web socket

Страниц (1): [1]
 

1. timofey1234 - 11 Февраля, 2018 - 19:26:56 - перейти к сообщению
CODE (php):
скопировать код в буфер обмена
  1. //один раз инициализировать 127.0.0.1:8080/this.php
  2.  
  3.  
  4. $NULL           = NULL;
  5. $address        = "127.0.0.1";
  6. $port           = 7272;
  7. $max_clients    = 10;
  8. $client_sockets = array();
  9. $master         = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  10. $res            = true;
  11. $res &= @socket_bind($master, $address, $port);
  12. $res &= @socket_listen($master);
  13. $dob = NULL;
  14.  
  15. if(!$res)
  16. {
  17.     die ("no\n");
  18. }
  19. $abort = false;
  20. $read = array($master);
  21. while(!$abort)
  22. {
  23.     $num_changed = socket_select($read, $NULL, $NULL, 0, 10);
  24.    
  25.     /* Изменилось что-нибудь? */
  26.     if ($num_changed)
  27.     {
  28.         /* Изменился ли главный сокет (новое подключение) */
  29.         if(in_array($master, $read))
  30.         {
  31.             if(count($client_sockets) < $max_clients)
  32.             {
  33.                 $client_sockets[]= socket_accept($master);
  34.  
  35.             }
  36.         }
  37.        
  38.         /* Цикл по всем клиентам с проверкой*/
  39.         foreach($client_sockets as $key => $client)
  40.         {
  41.             usleep(500000);
  42.  
  43.             if(in_array($client, $read))
  44.             {
  45.                 if($key=="0"){
  46.                     $input = socket_read($client, 1024);
  47.                     $dob = $input;
  48.                 }
  49.  
  50.                 if($input === false)
  51.                 {
  52.                     socket_shutdown($client);
  53.                     unset($client_sockets[$key]);
  54.                 }
  55.                 else
  56.                 {
  57.                     if($key=="1"){
  58.                         if (!@socket_write($client, $dob) )
  59.                         {
  60.                             socket_close($client);
  61.                             unset ( $client_sockets[$key] ) ;
  62.                         }
  63.                     }
  64.                 }
  65.  
  66.                 if($input == 'exit')
  67.                 {
  68.                     socket_shutdown($master);
  69.                     $abort = true;
  70.                 }
  71.  
  72.             }// END IF in_array
  73.  
  74.         } // END FOREACH
  75.  
  76.     } // END IF ($num_changed)
  77.  
  78.     $read = $client_sockets;
  79.     $read[] = $master;
  80.    
  81. } // END WHILE

Это работает на локальном сервере. С веб технологиями серверов в сети полный ноль.
Уважаемые гуру, подскажите, если этот или подобный скрипт будет на реальном хостинге, будет ли он работать, если в место локального адреса указать адрес или ip хоста?
После того как первый подключенный клиент он же передатчик запустит этот скрипт, то сразу начинает передавать пакеты на порт 7272. Теперь если другой клиент подключиться к 127.0.0.1:7272 то он начинает принимать пакеты от первого, согласно условию: 0 передатчик, 1 и остальные принимающие. Извините, если вопрос кажется глупым. Спасибо.

 

Powered by ExBB FM 1.0 RC1