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 :: Помогите разобраться с web socket

 PHP.SU

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


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

> Описание: Голову ломаю, не могу найти литературу по работе с сокетами
nikitka_vlasov
Отправлено: 06 Марта, 2015 - 17:38:33
Post Id


Новичок


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


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

[+]


Соединение держит при подключении, рукопожатие проходит,
а вот как отправить на сервер и затем тоже самое сообщение переслать на клиент,
не могу понять.
Интересует как происходить должен дальнейший обмен сообщениями, хотя бы как на этом готовом сервером ws://echo.websocket.org

Вот код сервера сокета:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.   set_time_limit(0); //Скрипт должен работать постоянно
  4.   ob_implicit_flush(); //Все echo должны сразу же отправляться клиенту
  5.  
  6.   $address = '0.0.0.0';
  7.   $port = 8080;
  8.  
  9.   //AF_INET - семейство протоколов | SOCK_STREAM - тип сокета | SOL_TCP - протокол
  10.   if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {echo "NO SOCKET\n";}else{echo "\nYes socket ...\n";}
  11.  
  12.   //Связываем дескриптор сокета с указанным адресом и портом
  13.   if (($bind = socket_bind($socket, $address, $port)) < 0) {echo "ERROR SOCKET ADRES PORT\n";}else{echo "Yes socket adres end port ...\n";}
  14.  
  15.   //разрешаем использовать один порт для нескольких соединений
  16.   socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
  17.  
  18.   //Начинаем прослушивание сокета (максимум 5 одновременных соединений)
  19.   if (($listen = socket_listen($socket, 0)) < 3) {echo "ERROR PROSLUHIVANIE\n";}else{echo "Podkluchaem client ...\n";}
  20.  
  21. //циклим
  22. do{
  23.     $accept = socket_accept($socket); //принимаем новый сокет
  24.     $header = socket_read($accept, 1024); //считывание данных с посланного хедера
  25.     $handshaking=perform_handshaking($header, $accept); //Рукопожатие
  26.     $test=socket_write($accept,$handshaking);//Посылаем ответ клиенту с рукопожатием
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33. //что тут писать чтобы принять и отправить сообщение
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. }while(true);
  41.  
  42.  
  43. socket_close($socket);
  44.  
  45. //Рукопожатие
  46. function perform_handshaking($receved_header,$client_conn)
  47. {
  48.         $headers = array();
  49.         $lines = preg_split("/\r\n/", $receved_header);
  50.         foreach($lines as $line)
  51.         {
  52.                 $line = chop($line);
  53.                 if(preg_match('/\A(\S+): (.*)\z/', $line, $matches))
  54.                 {
  55.                         $headers[$matches[1]] = $matches[2];
  56.                 }
  57.         }
  58.  
  59.         $secKey = $headers['Sec-WebSocket-Key'];
  60.         $secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
  61.         $upgrade  = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
  62.         "Upgrade: websocket\r\n" .
  63.         "Connection: Upgrade\r\n" .
  64.         "Sec-WebSocket-Origin: ws\r\n" .
  65.         "Sec-WebSocket-Location: ws\r\n".
  66.         "Sec-WebSocket-Accept: $secAccept\r\n\r\n";
  67.         return $upgrade;
  68. }
  69.  



Вот код клиента:


CODE (html):
скопировать код в буфер обмена
  1.  
  2. <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
  3. <script type="text/javascript">
  4.  
  5. window.onload=function(){
  6.     serverOn=document.getElementById('serverOn');
  7.     message1=document.getElementById('message1');
  8.     btnSend=document.getElementById('send');
  9.     btnStop=document.getElementById('stop');
  10.     label=document.getElementById('status');
  11.     msgs=document.getElementById('msgs');
  12.    
  13. //socket = new WebSocket("ws://echo.websocket.org");//Проверяем работоспособность тут
  14. socket = new WebSocket("ws://ваш адрес:8080");//ваш сервер
  15.  
  16.     //сервер заработал
  17.     socket.onopen = function(){
  18.         label.innerHTML = "START SERVER";
  19.     }
  20.        
  21.     //отправляем сообщение серверу
  22.     btnSend.onclick = function(){
  23.         socket.send(message1.value);
  24.     }
  25.    
  26.     //принимаем сообщения с сервера
  27.     socket.onmessage = function(event){
  28.         a=document.createElement("div");
  29.         a.innerHTML = event.data;
  30.         msgs.appendChild(a);
  31.     }
  32.        
  33.         //Сервер отключается
  34.         socket.onclose = function(event){
  35.         label.innerHTML = "ERROR";
  36.     }
  37.  
  38. }
  39. </script>
  40.  
  41. <input id="serverOn" type="button" value="Соединится с сервером" />
  42. <textarea id="message1" cols="80" rows="3">test massaga</textarea><input id="send" type="button" value="Отправить" />
  43. <input id="stop" type="button" value="Остановить" /><label id="status" >...</label><label id="msgs" ></label>
  44.  



PS. только не пишите зачем мне это нужно или присылайте ссылки статей на английском...

(Отредактировано автором: 06 Марта, 2015 - 17:41:41)

 
 Top
matpockun
Отправлено: 06 Марта, 2015 - 21:46:43
Post Id



Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2014  
Откуда: нижний новгород


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




Интересует как происходить должен дальнейший обмен сообщениями, хотя бы как на этом готовом сервером ws://echo.websocket.org<--не работает...
 
 Top
nikitka_vlasov
Отправлено: 06 Марта, 2015 - 22:54:22
Post Id


Новичок


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


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

[+]


matpockun пишет:
Интересует как происходить должен дальнейший обмен сообщениями, хотя бы как на этом готовом сервером ws://echo.websocket.org<--не работает...


что значит не работает, все там работает вот ссылка на echo сервер как пример http://www[dot]websocket[dot]org/echo[dot]html
 
 Top
matpockun
Отправлено: 07 Марта, 2015 - 13:30:23
Post Id



Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2014  
Откуда: нижний новгород


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




nikitka_vlasov пишет:
matpockun пишет:
Интересует как происходить должен дальнейший обмен сообщениями, хотя бы как на этом готовом сервером ws://echo.websocket.org<--не работает...


что значит не работает, все там работает вот ссылка на echo сервер как пример http://www.websocket.org/echo.html



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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB