PHP Websocket Server hybi10



所以Chrome 14已经实现了websockets的混合版本。我有一个内部程序,我们公司通过chrome使用websockets,这是打破了这个变化。

是否有人成功地使用php服务器框架数据?我能够让新的握手方式工作,但我似乎不知道框架是什么。这里有一个python的例子https://github.com/kanaka/websockify/blob/master/websocket.py#L233但我有一个困难的时间将其转换为php,有人有建议吗?

我应该提到python示例中所讨论的函数是decode_hybi()。

我刚刚完成了一个类,它使Nico Kaiser (https://github.com/nicokaiser/php-websocket)的PHP-Websocket-Server能够处理hyb10帧和握手。您可以在这里下载新类:http://lemmingzshadow.net/386/php-websocket-serverclient-nach-draft-hybi-10/(Connection.php)

此代码假设没有错误或畸形帧,并基于此答案-如何在WebSockets hybi 08+中构造数据帧。

这个代码是非常基本的,远远不是一个完整的解决方案。它适用于我的目的(这是相当基本的)。希望对别人有帮助。

function handle_data($data){
    $bytes = $data;
    $data_length = "";
    $mask = "";
    $coded_data = "" ;
    $decoded_data = "";        
    $data_length = $bytes[1] & 127;
    if($data_length === 126){
       $mask = substr($bytes, 4, 8);
       $coded_data = substr($bytes, 8);
    }else if($data_length === 127){
        $mask = substr($bytes, 10, 14);
        $coded_data = substr($bytes, 14);
    }else{
        $mask = substr($bytes, 2, 6);
        $coded_data = substr($bytes, 6);
    }
    for($i=0;$i<strlen($coded_data);$i++){
        $decoded_data .= $coded_data[$i] ^ $mask[$i%4];
    }
    $this->log("Server Received->".$decoded_data);
    return true;
}

这是发送数据返回的代码。这是非常基本的,它假设你发送的是一个文本框。没有延续帧等。也没有错误检查。希望对其他人有用。

public function send($data)
{
    $frame = Array();
    $encoded = "";
    $frame[0] = 0x81;
    $data_length = strlen($data);
    if($data_length <= 125){
        $frame[1] = $data_length;    
    }else{
        $frame[1] = 126;  
        $frame[2] = $data_length >> 8;
        $frame[3] = $data_length & 0xFF; 
    }
    for($i=0;$i<sizeof($frame);$i++){
        $encoded .= chr($frame[$i]);
    }
    $encoded .= $data;
    write_to_socket($this->socket, $encoded);  
    return true;     
}

相关内容

  • 没有找到相关文章

最新更新