Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Веб сокеты [3]

 PHP.SU

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


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

> Без описания
Zuldek
Отправлено: 09 Июля, 2014 - 11:52:14
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




OrmaJever пишет:
Так же как и на Си только в одном потоке Ха-ха


Ну это решаемо, другой вопрос, нахрена?
Ладно если вы пишите не сервер для клиентов, а соединятесь сами через сокеты или открываете сокет сервер для умеющих работать с протоколом клиентов.
Но для браузера обычного это делать, создавая универсальное приложение... не оправдано. Если это корпоративное приложение или для сообщества — ещё куда ни шло.
Для остального замучаетесь писать обходные решения на транспортах лонгполлингов, флеше и xmlhttprequest.

(Отредактировано автором: 09 Июля, 2014 - 11:53:53)

 
 Top
esterio
Отправлено: 09 Июля, 2014 - 12:17:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




да пусть ТС пишет на ПХП вебсокет сервер. рано или поздно поймет что это не лучшее решение. Таким образом набет еще одну шишку на голове Радость
(Добавление)
LIME
да проблемы начинаються от поддержкы браузерами до того что ПХП хоть и может но уж очень туго держать постоянное соединение
 
 Top
Zuldek
Отправлено: 09 Июля, 2014 - 14:03:34
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




esterio пишет:
может но уж очень туго держать постоянное соединение

Да нет там никаких тугостей. Оптмизировать всё можно и при необходимости запустить в несколько потоков. Код, где не будет течь память и правильно настроен веб-сервер, отработает нормально. По ресурсам, понятное дело, получится прожорливее чем тоже самое на С, или даже питоне, но всё-равно вполне рабочее решение.
Суть в том что это просто геморнее, чем воспользоватья решениями специально для этого написанными.
Примеры коммерческих проектов где на виртуальном хостинге надо держать серверы на веб-сокетах мне не известны. Приведите, если кто-то знает.

(Отредактировано автором: 09 Июля, 2014 - 14:06:02)

 
 Top
dvd2444
Отправлено: 09 Июля, 2014 - 15:09:48
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




Можете разъяснить некоторые моменты в коде?
PHP:
скопировать код в буфер обмена
  1. public function run()                   //Запуск сервера
  2.     {
  3.         $this->start(); //Функция создает  сокет
  4.        
  5.         $this->clients = array($this->socket); //создаю массив пользователей
  6.        
  7.         $null=null;
  8.         do
  9.         {
  10.             $read = $this->clients;
  11.             if (socket_select($read, $write = NULL, $except = NULL, 0) < 1) //ждем каких либо действий
  12.             {
  13.                 continue;
  14.             }
  15.            
  16.             if (in_array($this->socket, $read))
  17.             {
  18.                 $this->clients[] = $newsock = socket_accept($this->socket);//создаем новое подключение
  19.                 $data = socket_read($newsock, 1024);
  20.                
  21.                 $this->handshake($data,$newsock);//выполняем рукопожатие
  22.                
  23.                 $msg = $newsock." connected to the server";
  24.                 $this->send($msg);                               //отпраляем пользователям сообщение
  25.                
  26.                 $msg = "<hr>".$msg."<hr>";
  27.                 $this->console($msg);
  28.                
  29.                 $key = array_search($this->socket, $read);//Вот здесь появляется непонимание.Для чего удалять созданное подключение?
  30.                 unset($read[$key]);                                  //Если эти строки удалить, то подключение нескольких юзеров одновременно не возможно
  31.             }
  32.            
  33.             foreach ($read as $read_sock)// перебираем все подключения
  34.             {              
  35.                 $data = socket_read($read_sock, 1024);//считвываем сообщения от всех пользоателей
  36.            
  37.                 if ($data === false)   //если пользователь отключился вызываем фцию отключения
  38.                 {
  39.                     // remove client for $clients array
  40.                     $this->close($read_sock);
  41.                     continue;
  42.                 }
  43.                 else
  44.                 {                                
  45.                    
  46.                     $data = $this->decode($data);  
  47.                    
  48.                     if($data['payload']=='close')
  49.                     {                        
  50.                         $this->close($read_sock);
  51.                         continue;
  52.                     }
  53.                    
  54.                     $data['payload'] = $read_sock." Say: ".$data['payload'];
  55.                     $this->send($data['payload']);
  56.                     $this->console($data['payload']."<br />");      //отправляем сообщение пользователю
  57.                 }
  58.            
  59.             }
  60.         }while(true);

Еще есть проблема с тем, что когда я закрываю страницу браузера с активным подключением отключаются все пользователи и больше подключиться не удается(хотя сервер не останавливается)

(Отредактировано автором: 09 Июля, 2014 - 15:12:22)

 
 Top
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB