давайте напишем фрейворд для работы с WS

Discussion in 'PHP' started by barnaki, 8 Apr 2012.

  1. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    давайте напишем фрейворк для работы с WS

    нашел вот что http://ru.wikipedia.org/wiki/WebSocket
    и подумал давайте сервеную часть вместе напишем на php ? или я опоздал и это уже есть ? что нить типа мини фрейворка можно наляпать. скажите хоть куда копать. подкиньте понятных статей по ws . я напишу и исходник выкину. только покажите где почитать плиз. ну очень интересно стало.
    ps. узнал что для этого придется написать эмуляцию протокола . что это значит скиньте ссылок .
    ps2. вот ссылка на клиента http://code.google.com/p/jquery-websocket/
    ps3. нарыл это http://www.w3.org/TR/2011/CR-websockets-20111208/#the-websocket-interface . что за язык в исходниках ?
    ps4. итого http://code.google.com/p/phpwebsocket/ или http://habrahabr.ru/post/82140/
     
    #1 barnaki, 8 Apr 2012
    Last edited: 8 Apr 2012
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    barnaki Насколько знаю, вебсокет не является стандартом по факту и все может в любой момент поломаться. На гитхабе не смотрели? http://bit.ly/HnUoZh
     
    _________________________
  3. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    2 Gifts но штука то все = крутая :).
    правда тут http://code.google.com/p/jquery-websocket/issues/list сказано undefined in Firefox :(. а может уже пофиксили. весь фреймв то
    Code:
    /*  * jQuery Web Sockets Plugin v0.0.1  * http://code.google.com/p/jquery-websocket/  *  * This document is licensed as free software under the terms of the  * MIT License: http://www.opensource.org/licenses/mit-license.php  *   * Copyright (c) 2010 by shootaroo (Shotaro Tsubouchi).  */ (function($){ $.extend({ 	websocketSettings: { 		open: function(){}, 		close: function(){}, 		message: function(){}, 		options: {}, 		events: {} 	}, 	websocket: function(url, s) { 		var ws = WebSocket ? new WebSocket( url ) : { 			send: function(m){ return false }, 			close: function(){} 		}; 		$(ws) 			.bind('open', $.websocketSettings.open) 			.bind('close', $.websocketSettings.close) 			.bind('message', $.websocketSettings.message) 			.bind('message', function(e){ 				var m = $.evalJSON(e.originalEvent.data); 				var h = $.websocketSettings.events[m.type]; 				if (h) h.call(this, m); 			}); 		ws._settings = $.extend($.websocketSettings, s); 		ws._send = ws.send; 		ws.send = function(type, data) { 			var m = {type: type}; 			m = $.extend(true, m, $.extend(true, {}, $.websocketSettings.options, m)); 			if (data) m['data'] = data; 			return this._send($.toJSON(m)); 		} 		$(window).unload(function(){ ws.close(); ws = null }); 		return ws; 	} }); })(jQuery);
    ps. может это от того что он не во всех браузерах включен по умолчанию ?или словами Gifts
    :)
    или они там не совсем дебилы. завтра проверю :)
    или я не так понял ? что значит поломатся ?
     
    #3 barnaki, 8 Apr 2012
    Last edited: 8 Apr 2012
  4. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Большинство людей все еще используют браузеры без поддержки вебсокетов, а в IE скорее всего вообще никогда не будет их поддержки.
    В конце 2010 - начале 2011 FF и Opera уже отключали поддержку вебсокетов из-за уязвимостей протокола.

    p.s.: чем не устраивают флешсокеты?
     
  5. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    p.s.:
    ??? че то даже нагуглить нечего не могу . что это ? это предложение на action script перейти ? :)
    ps. Тут http://habrahabr.ru/company/microsoft/blog/130741/ сказано что сокеты появятся в ie 10 :p
     
    #5 barnaki, 8 Apr 2012
    Last edited: 9 Apr 2012
  6. Alexander89

    Alexander89 Member

    Joined:
    30 Nov 2009
    Messages:
    30
    Likes Received:
    8
    Reputations:
    0
    вот пишу websocket из за этих надуманных проблем безопасности протокол несколько раз изменили и сейчас заморочили что пипец.
    на сообщение нужно накладывать маску

    рукопожатие проходит успешно
    получение данных тоже проходит успешно,
    а вот с отправкой проблема

    Нашел две функции для кодирования hybi10Encode($data)
    и декодирования hybi10Decode
    данных.
    При отправка данных в браузер соединение сразу закрывается браузером. в консоли браузера тишина

    помогите разобраться с hybi10Encode($data)

    PHP:

        
    function hybi10Encode($data){
            
    $frame = Array();
            
    $mask = array(rand(0255), rand(0255), rand(0255), rand(0255));
            
    $encodedData '';
            
    $frame[0] = 0x81;
            
    $dataLength strlen($data);


            if(
    $dataLength <= 125)
            {        
                
    $frame[1] = $dataLength 128;        
            }
            else
            {
                
    $frame[1] = 254;  
                
    $frame[2] = $dataLength >> 8;
                
    $frame[3] = $dataLength 0xFF
            }    
            
    $frame array_merge($frame$mask);    
            for(
    $i 0$i strlen($data); $i++)
            {        
                
    $frame[] = ord($data[$i]) ^ $mask[$i 4];
            }

            for(
    $i 0$i sizeof($frame); $i++)
            {
                
    $encodedData .= chr($frame[$i]);
            }

            return 
    $encodedData;
        }
        
        
        
        
        
        
        function 
    hybi10Decode($data)
        {
            
    $bytes $data;
            
    $dataLength '';
            
    $mask '';
            
    $coded_data '';
            
    $decodedData '';
            
    $secondByte sprintf('%08b'ord($bytes[1]));
            
    $masked = ($secondByte[0] == '1') ? true false;
            
    $dataLength = ($masked === true) ? ord($bytes[1]) & 127 ord($bytes[1]);

            if(
    $masked === true)
            {
                if(
    $dataLength === 126)
                {
                   
    $mask substr($bytes44);
                   
    $coded_data substr($bytes8);
                }
                elseif(
    $dataLength === 127)
                {
                    
    $mask substr($bytes104);
                    
    $coded_data substr($bytes14);
                }
                else
                {
                    
    $mask substr($bytes24);        
                    
    $coded_data substr($bytes6);        
                }    
                for(
    $i 0$i strlen($coded_data); $i++)
                {        
                    
    $decodedData .= $coded_data[$i] ^ $mask[$i 4];
                }
            }
            else
            {
                if(
    $dataLength === 126)
                {           
                   
    $decodedData substr($bytes4);
                }
                elseif(
    $dataLength === 127)
                {            
                    
    $decodedData substr($bytes10);
                }
                else
                {                
                    
    $decodedData substr($bytes2);        
                }        
            }    

            return 
    $decodedData;
        }    





    ссылка по теме
    http://s247.codeinspot.com/q/2870253
     
    #6 Alexander89, 23 Apr 2012
    Last edited: 23 Apr 2012
  7. Alexander89

    Alexander89 Member

    Joined:
    30 Nov 2009
    Messages:
    30
    Likes Received:
    8
    Reputations:
    0
    Функции оказались рабочие.

    А так же стоит учесть что если браузер IE то соединение идет через флеш и первый запрос будет <policy-file-request/>
    На него надо ответить
    PHP:
    $policy = '<?xml version="1.0"?>' . "\n";
    $policy .= '<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">' . "\n";
    $policy .= '<cross-domain-policy>' . "\n";
    $policy .= '<allow-access-from domain="*" to-ports="*"/>' . "\n";
    $policy .= '</cross-domain-policy>' . "\n";
     
     
    #7 Alexander89, 25 Apr 2012
    Last edited: 27 Jul 2012
    1 person likes this.
  8. Alexander89

    Alexander89 Member

    Joined:
    30 Nov 2009
    Messages:
    30
    Likes Received:
    8
    Reputations:
    0
    Фремвор сильно сказано.
    А вот простенкий вебсокет сервер думаю можно набросать
     
  9. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    Может потроллю. А на Си нельзя? Зачем велик изобретать перед нормальным программингом
     
  10. Alexander89

    Alexander89 Member

    Joined:
    30 Nov 2009
    Messages:
    30
    Likes Received:
    8
    Reputations:
    0
    1) на чистом С ??? Может тогда уж на асемблере??
    2) Думаю любой вебмастер знает php. А сколько вебмастеров знает C ?
    3)Тот кому понадобиться WS будет его тюнить под себя (ну не будет же он только эхо тестом пользоваться)
     
  11. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    Можно и на ассемблере ) я сокеты и серверы писал
    Нормально пхп знают не многие, ИМХО их меньше чем нормальнознающих С-программеров.
    Ну а что этот вэбсокет сможет? RAW-пакеты, неблокирующие сокеты и т.д?
     
  12. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    можно еще работу с проксями туда добивить. и все запилить в pear пакет.
     
  13. Alexander89

    Alexander89 Member

    Joined:
    30 Nov 2009
    Messages:
    30
    Likes Received:
    8
    Reputations:
    0
    Что то я вообще не понял куда там можно влипить прокси. И зачем
     
    #13 Alexander89, 16 Aug 2012
    Last edited: 16 Aug 2012
  14. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    это конечно делать никто не будет. но я о том. что можно запилить какую нить либу. для работы с разными штуками типа ws,proxy,webmoney и так далее. не кучу всего отдельно чтобы искать а скачал и готово. все что хочешь.
     
  15. Alexander89

    Alexander89 Member

    Joined:
    30 Nov 2009
    Messages:
    30
    Likes Received:
    8
    Reputations:
    0
    #15 Alexander89, 16 Aug 2012
    Last edited: 16 Aug 2012