cyberkatze
04-08-2015, 12:07
Привет всем!
Мучаемся уже неделю, но так и не пришли к желаемому результату и уже рассматриваем альтернативу перехода на линукс машину.
Что имеем:
1( сервер
WinServer 2008 R2 Ent.
TMG v7.0.9193.500
2( локальный сервер в сети
Tomcat 7.0.63 + websocket_url
задача: пропускать во внешнюю сеть доступ к урлу с ресурсом на вебсокет.
что сделано:
1) подняли томкэт сервер и задеплоили тестовый пример эхо-вебсокета. я его переделал так, что он бродкастит текущее время при подключении к серверу каждую секунду.
локально внутри сети все работает
2) создали правило редиректа с адреса https://ws.mydomain.com на IP-адрес локального сервера по протоколам HTTP/HTTPS.
ЗЫ: у нас стоит правило, что все что приходит по HTTP обворачивается в HTTPS на сервере TMG Forefront.
таким образом заменили в скрипте javascript урл c WS://url на "wss://ws.mydomain.com/echo"
Но к сожалению в логах браузера получаем ошибку 404 на "wss://ws.mydomain.com/echo", как ресурс не найден.
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
@ServerEndpoint("/echo")
public class WebSocketEndPoint{
@OnOpen public void onOpen(final Session session) {
System.out.println(session.getId() + " has opened a connection");
try {
session.getBasicRemote().sendText("msg from server: Connection Established");
new Thread(new Runnable() {
@Override public void run() {
java.util.Date date;
while (true) {
date = new java.util.Date();
try {
session.getBasicRemote().sendText("msg from server:" + new Timestamp(date.getTime()));
} catch (IOException e1) {e1.printStackTrace();}
Thread.sleep(1000);
}
}
}).start();
} catch (IOException ex) {ex.printStackTrace();}
}
@OnMessage public void onMessage(String message, Session session) {
System.out.println("Message from " + session.getId() + ": " + message);
for (Session clientSession : session.getOpenSessions()) {
try {
clientSession.getBasicRemote().sendText(message);
} catch (IOException e) { e.printStackTrace();}
}
}
@OnClose public void onClose(Session session) {System.out.println("Session " + session.getId() + " has ended");}
@OnError public void onError(Throwable error) {System.out.println("ERROR: " + error.getMessage());}
}
Не могли бы Вы подсказать, как можно исправить настройки сервера, чтобы он разрешил доступ извне для нашего локального вебсокет-сервера?
Спасибо!
Мучаемся уже неделю, но так и не пришли к желаемому результату и уже рассматриваем альтернативу перехода на линукс машину.
Что имеем:
1( сервер
WinServer 2008 R2 Ent.
TMG v7.0.9193.500
2( локальный сервер в сети
Tomcat 7.0.63 + websocket_url
задача: пропускать во внешнюю сеть доступ к урлу с ресурсом на вебсокет.
что сделано:
1) подняли томкэт сервер и задеплоили тестовый пример эхо-вебсокета. я его переделал так, что он бродкастит текущее время при подключении к серверу каждую секунду.
локально внутри сети все работает
2) создали правило редиректа с адреса https://ws.mydomain.com на IP-адрес локального сервера по протоколам HTTP/HTTPS.
ЗЫ: у нас стоит правило, что все что приходит по HTTP обворачивается в HTTPS на сервере TMG Forefront.
таким образом заменили в скрипте javascript урл c WS://url на "wss://ws.mydomain.com/echo"
Но к сожалению в логах браузера получаем ошибку 404 на "wss://ws.mydomain.com/echo", как ресурс не найден.
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
@ServerEndpoint("/echo")
public class WebSocketEndPoint{
@OnOpen public void onOpen(final Session session) {
System.out.println(session.getId() + " has opened a connection");
try {
session.getBasicRemote().sendText("msg from server: Connection Established");
new Thread(new Runnable() {
@Override public void run() {
java.util.Date date;
while (true) {
date = new java.util.Date();
try {
session.getBasicRemote().sendText("msg from server:" + new Timestamp(date.getTime()));
} catch (IOException e1) {e1.printStackTrace();}
Thread.sleep(1000);
}
}
}).start();
} catch (IOException ex) {ex.printStackTrace();}
}
@OnMessage public void onMessage(String message, Session session) {
System.out.println("Message from " + session.getId() + ": " + message);
for (Session clientSession : session.getOpenSessions()) {
try {
clientSession.getBasicRemote().sendText(message);
} catch (IOException e) { e.printStackTrace();}
}
}
@OnClose public void onClose(Session session) {System.out.println("Session " + session.getId() + " has ended");}
@OnError public void onError(Throwable error) {System.out.println("ERROR: " + error.getMessage());}
}
Не могли бы Вы подсказать, как можно исправить настройки сервера, чтобы он разрешил доступ извне для нашего локального вебсокет-сервера?
Спасибо!