PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

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

> Найдено сообщений: 1
timofey1234 Отправлено: 11 Февраля, 2018 - 19:26:56 • Тема: php web socket • Форум: HTTP и PHP

Ответов: 0
Просмотров: 448
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 и остальные принимающие. Извините, если вопрос кажется глупым. Спасибо.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB