2016-10-16 2 views
3

Я купил модуль WebSocket и установил его в своей среде WAMP. У меня также есть PHP-скрипт, который генерирует файл IPC в правильном месте и навсегда навещает для прослушивания события. Однако, используя этот код на стороне клиента:Что такое ошибка WebSocket в статусе 200?

var websocket = null; 

var connect = function() { 
    var button = document.getElementById('connect-button'); 
    // This function is a convenience function, to set the content 
    // of the response display 
    var setResponse = function(text) { 
     var element = document.getElementById('response'); 
     element.innerHTML = text; 
    } 
    // A message telling the user we started connecting is always 
    // useful 
    button.innerHTML = 'Connecting ...'; 
    // The file name `demo.ws' could in principle help in having multiple 
    // websockets at a single domain name. 
    // 
    // It's not implemented right now, but it can be if it's needed and 
    // it's not too hard.  
    //var url = "ws://websocket-example/websocket-example/websocket-example-websocket.rp"; 
    var url = 'ws://' + window.location.hostname + '/WebSocket/websocket-example-websocket.rp'; 
    // Create the websocket connection now  
    websocket = new WebSocket(url, 'standard'); 
    // Install the handlers, the On Open handler is triggered 
    // immediately after the conection has been established 
    // and a successful handshake 
    websocket.onopen = function(event) { 
     // Update the connection status indicator 
     var element = document.getElementById('connection-status'); 
     var input = document.getElementById('input'); 
     element.innerHTML = 'Connected Now'; 
     element.setAttribute('class', 'online'); 
     // Update the button, and install a new handler to allow 
     // closing the websocket connection 
     button.innerHTML = 'Close'; 
     button.onclick = function() { 
      websocket.close(); 
     } 
     input.focus(); 
     input.value = ''; 
    } 
    // On close and on error handler, this is a simple demo 
    // hence the simplistic approach. Ideally this should be 
    // two separate functions 
    websocket.onclose = 
    websocket.onerror = function(event) { 
     // Update the connection status indicator 
     var element = document.getElementById('connection-status'); 
     var input = document.getElementById('input'); 
     element.innerHTML = 'Offline'; 
     element.setAttribute('class', 'offline'); 
     // Update button click handler, to reconnect if requested 
     button.innerHTML = 'Connect'; 
     button.onclick = connect; 
     input.value = ''; 
     // Clear the response text 
     setResponse(''); 
     // Reset the websocket global variable 
     websocket = null; 
    } 
    // On message handler, triggered when a message is received 
    websocket.onmessage = function(event) { 
     // Set the response text 
     setResponse(event.data); 
    } 
} 

var send = function(message) { 
    // Send a message to the server but check that the websocket 
    // was connected first 
    if (websocket === null) 
     return; 
    // It's ok so, send the message now 
    websocket.send(message); 
} 

Когда соединение инициируется, мой запрос не выполняется со следующей ошибкой:

WebSocket connection to 'ws://websocket-example/WebSocket/websocket-example-websocket.rp' failed: Error during WebSocket handshake: Unexpected response code: 200

и websocket остается null. Я абсолютно не понимаю эту ошибку, так как 200 кажется ОК, но мой запрос не срабатывает. Файл IPC был сгенерирован после запуска сервера, находится в правильном месте, и пользователь, выполняющий скрипт, имеет необходимые привилегии для запроса файла. В чем причина такого поведения и как его исправить?

+0

Можем ли мы иметь образец описания инициализации сервера WebSocket в PHP? Принимает ли сервер какое-либо соединение из любого источника? –

+0

@AxelIsouard, так как я купил его, я не уверен, что мне разрешено использовать исходный код обработчика, и у меня нет исходного кода модуля, поэтому, чтобы ответить на ваш вопрос, я должен полагаться на textual sum ups: На сервере у меня есть PHP-скрипт обработчика, который удаляет файл IPC, если существует и воссоздает его, а затем вводит непрерывный цикл, где он проверяет соединения и сообщения и обрабатывает их. После каждой итерации цикла он ожидает 250 миллисекунд. Это работало на автора, я даже протестировал демо и увидел, что WebSocket работает. –

+0

@AxelIsouard Однако модуль был создан для немного другой версии Apache. Это возможная проблема. Я отправил его по электронной почте и увижу его ответ. Я очень близок к тому, что здесь работают WebSockets, и я застрял в этой ошибке, и я не знаю, откуда она и что это значит. –

ответ

3

На соединении с WebSocket вы не ответили на 101 Switching Protocols.
Получение ответа 200, вероятно, означает, что запрос не достиг вашего обработчика WebSocket.

Я также хотел бы изучить dev-tools и проверить, есть ли у ответа какие-либо заголовки квитирования WebSocket.
Если это так, я бы предположил, что это проблема с модулем. В противном случае это, вероятно, ваша конфигурация.

0

Такой ответ означает, что удаленный ресурс, расположенный по URL-адресу, не прослушивает или, по крайней мере, не может отвечать на запрос веб-камеры. Проверьте удаленный сервис, который вы пытаетесь достичь. И если вы закодировали сервер, опубликуйте свой источник

+0

Кевин, я не уверен, что мне разрешено публиковать код, за который я заплатил. Я подытожил, как это работает в разделе комментариев, но не может передавать настоящий код сервера здесь, так как я бы повредил интересам отличного парня, который создал модуль, который будет работать хорошо. Я почти готов с настройкой, но застрял в этой ошибке и задаюсь вопросом о значении и причине. Если мы сможем сузить его, тогда я смогу легко решить проблему, однако проблема-пространство довольно широка. –

Смежные вопросы