यह कोड कोई त्रुटि या विकृत फ्रेम नहीं मानता है और इस उत्तर पर आधारित है - 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;
}
यहाँ डेटा वापस भेजने के लिए कोड है। फिर यह बहुत बुनियादी है, यह मानता है कि आप एक पाठ फ्रेम भेज रहे हैं। कोई निरंतरता फ्रेम नहीं। कोई त्रुटि जांच नहीं है। उम्मीद है कि दूसरों को यह उपयोगी लगेगा।
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-ड्राफ्ट-08। मैंने यह बताने की कोशिश की कि नया फ़्रेमिंग कैसे काम करता है; शायद यह मदद करता है। – pimvdb
यह सहायक था धन्यवाद! मैं दूसरों के लिए PHP में समाधान पोस्ट करूंगा। – jivetek