Я просматривал форумы здесь, и это был самый близкий вопрос, который я нашел:
Как (де) построить фреймы данных в WebSockets hybi 08 +?
Разница в том, что я не могу получить успешное рукопожатие.Я предполагаю, что кадрирование не играет роли, пока ПОСЛЕ рукопожатия не будет, это правильно?
Я собирался запустить проверку концепции, когда Chrome удобно обновился до версии 14, которая использует веб-сокет HyBi 10протокол (http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10). На основе информации в спецификации о рукопожатии (http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10#section-5.2.2) Мне удалось успешно создать ключ Sec-WebSocket-Accept (успех на основе их примера), но нана стороне клиента функция socket.onopen никогда не срабатывает.
В прошлый раз, когда у меня возникла проблема с рукопожатием протокола WebSocket, это была проблема с завершением рукопожатия правильными байтами (или я полагаю, что символы более точные?Я использую PHP для текущей реализации, и это означало попытку декодировать реализации Python или C #, но пока безуспешно.
Вот мой Javascript на стороне клиента, работающий в Chrome 14 (для Windows):
var socket;
socket = new WebSocket(host);
socket.onopen = function(msg){
// process onopen
};
socket.onmessage = function(msg){
// process message
};
socket.close = function(msg){
// process close
};
А вот мой серверный PHP-код для рукопожатия:
function dohandshake($user,$buffer){
// getheaders and calcKey are confirmed working, can provide source if desired
list($resource,$host,$origin,$key,$version) = $this->getheaders($buffer);
$request = "HTTP/1.1 101 Switching Protocols\r\n" .
"Upgrade: WebSocket\r\n" .
"Connection: Upgrade\r\n" .
"Sec-WebSocket-Accept: " . $this->calcKey($key) . "\r\n";
socket_write($user->socket,$request);
$user->handshake=true;
return true;
}
ОднаждыКлиент отправляет начальное рукопожатие, сокет Javascript остается в состоянии CONNECTING в течение неопределенного времени.Это означает, что онопен никогда не срабатывает, и поэтому мой сокет остается в подвешенном состоянии.Любые идеи о том, как отлаживать или даже лучше подтверждать мой подход рукопожатия, были бы великолепны.
Вот очевидное (я не могу сказать, работает ли оно наверняка или нет) решение в Python (https://github.com/kanaka/websockify/blob/master/websocket.py). Найдите метод do_handshake.
Спасибо!