は、このコードは、エラーや不正なフレームを負うものではありませんし、この回答に基づいている - How to (de)construct data frames in 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;
}
ここに戻ってデータを送信するためのコードです。ここでもこれは基本的なもので、1つのテキストフレームを送信していることを前提としています。継続フレームはありません。エラーチェックもありません。うまくいけば、他の人がそれが役に立つと思うでしょ
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;
}
多分この質問はあなたのために興味深いです:http://stackoverflow.com/questions/7040078/not-sure-how-to-frame-data-in -websockets-draft-08。新しいフレーミングがどのように機能するのか説明しようとしました。おそらくそれは役に立ちます。 – pimvdb
ありがとうございました!私は他の人のためにPHPで解決策を投稿します。 – jivetek