Vaadin не может установить соединение Websocket на OpenShift

Я использую Vaadin 7.3 с Tomcat8 (собран вручную из исходников на сервере) на сервере OpenShift. Моя другая установка — Tomcat7 7.0.54, также на OpenShift. Моя проблема возникает в обеих этих конфигурациях. Вот что происходит: когда я открываю свое приложение Vaadin с включенной поддержкой @Push, я получаю следующую ошибку:

WebSocket connection to 'ws://t8-drewconnect.rhcloud.com/web/PUSH/?v-uiId=0&v-csrfToken=4097664e-4d3b-4dd6-9474-0a6441986e9a&X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=2.1.5.vaadin4-jquery&X-Atmosphere-Transport=websocket&X-Atmosphere-TrackMessageSize=true&X-Cache-Date=0&Content-Type=application/json;%20charset=UTF-8&X-atmo-protocol=true' failed: Error during WebSocket handshake: Unexpected response code: 501 
​Websocket closed, reason: Connection was closed abnormally (that is, with no close frame being sent). vaadinPush.debug.js:13176
Websocket closed, wasClean: false vaadinPush.debug.js:13176
Mon Sep 22 07:39:46 GMT+200 2014 com.vaadin.client.VConsole
INFO: Push connection closed com.drewconnect.web.AppWidgetSet-0.js:4714
Websocket failed. Downgrading to Comet and resending vaadinPush.debug.js:13176
Mon Sep 22 07:39:46 GMT+200 2014 com.vaadin.client.VConsole
INFO: Push connection using primary method (websocket) failed. Trying with long-polling 

Я провел много времени в Интернете, читая, что можно с этим сделать, читал о включении встроенной поддержки атмосферы и т. Д. И собирался настроить ее, когда обнаружил, что Vaadin использует Atmosphere в комплекте с атмосферой-runtime-2.1. 2.vaadin3.jar, от которого я не уверен, что смогу избавиться. Эта статья об атмосфере https://github.com/Atmosphere/atmosphere/wiki/Installing-AtmosphereServlet-with-or-without-native-support предлагает использовать атмосферную среду выполнения, но похоже, что Vaadin использует какую-то настраиваемую версию...

Как ни странно, на локальном хосте (в моей среде разработки) соединение WebSockets устанавливается без проблем...

Я на правильном пути решения проблемы или я где-то совсем в другом месте? ;-) Ребята, вы знаете решение этой проблемы? Буду признателен за ответ, т.к. согласование между вебсокетами и лонг-поллингом занимает много времени - мне приходится ждать около 2 минут, прежде чем приложение среагирует, а иногда оно так и не завершается (вверху экрана мигает индикатор выполнения , который никогда не достигает 100%). Мой клиент, которому я представил демо приложения, не может подключиться в 9 из 10 случаев, так что я совсем застрял - не увидев демо, он со мной дальше не пойдет ;(


person Piotr Górny    schedule 22.09.2014    source источник


Ответы (1)


Передний прокси-сервер по умолчанию, используемый OpenShift, еще не поддерживает WebSockets. Я слышал, что они собираются обновить его в ближайшее время. До этого вы можете использовать их экспериментальный альтернативный прокси с порта 8000, который уже поддерживает веб-сокеты. В вашем случае до него можно добраться по адресу:

http://t8-drewconnect.rhcloud.com:8000/web/

Также обратите внимание, что опрос (UI.setPollingInterval(int)) часто достаточно хорош для большинства целей.

person mstahv    schedule 22.09.2014