Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.12.2014, 11:17
Azo вне форума Посмотреть профиль Отправить личное сообщение для Azo Найти все сообщения от Azo
  № 1  
Ответить с цитированием
Azo
 
Аватар для Azo

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
По умолчанию flash-policy-file + WebSocket + Servlets + ServerEndpoint Socket

Привет!
? Кто-нибудь разворачивал WebSocket на Tomcat8 используя сервлеты?
! Я вот развернул, и вообще супер удобно делать чаты на таком сервере.
... Но рано радовался. Локально все было хорошо, но стоило залить в ВК - проблемы с crossdomain.
! Тогда я поднял демона на 843 порту.
... Казалось бы должно работать теперь
! Но теперь он хочет еще и crossdomain с того порта где развернут мой чат-сервер (8084)
... Странно, я думал что Socket-у достаточно демона на 843. И даже Security.loadPolicyFile не поможет.


приведу особенности моего кода и технологии которая выбрана мной в качестве сервера.



Вот код моего сервера. Там, как вы видите, @ServerEndpoint(value="/chat/{pid}/{uid}/{auth_key}")
Что означает что чат доступен по такому адресу ws://h.o.s.t : port/SocialGame/chat/1/143242342/sdfJljfkJAJldasdLKj
Вот как раз таки наверное в этом и проблема? возможно Security грузит policy из h.o.s.t : port а не h.o.s.t : port/SocialGame/chat/1/143242342/sdfJljfkJAJldasdLKj ?


JAVA:
Код AS3:
package servlets;
 
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.OnOpen;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
 
@ServerEndpoint(value="/chat/{pid}/{uid}/{auth_key}")
public class ChatServer {
 
    @OnOpen
    public void onOpen(Session userSession,@PathParam("pid") Byte pid, @PathParam("uid") Long uid, @PathParam("hash") String auth_key) throws UnsupportedEncodingException {
        // EndpointConfig config
        System.out.println("onOpen " +pid+" uid "+uid);
        if (Signature.isCorrent(pid,uid,hash,Constant.getString("api_vk_id"),Constant.getString("api_vk_secret"))==false) {
                    StatisticaError.add(pid,uid, "CHAT OPEN", "SOCIAL SIGNATURE ERR");                   
                    return;
        }
        System.out.println("New request received. pid: " +pid+" uid "+uid);        
        ChatSession cs=addSession(pid,uid,userSession);
 
        List<ChatProfile> onlines=new ArrayList<ChatProfile>();
                    onlines.add(cs.profile);                    
                    ChatMessage cm_for_others=new ChatMessage(uid,"[Пользователь вошел в игру]",TimeUtils.now_sec(),ChatMessage.TYPE_CONNECT,onlines,(long)0);
                    sendToAll(pid, uid, cm_for_others, userSession);
 
    }
 
    @OnClose
    public void onClose(Session userSession,@PathParam("pid") Byte pid, @PathParam("uid") Long uid) throws UnsupportedEncodingException {
        System.out.println("Connection closed. uid: " + uid);        
        removeSession(pid, uid);
        ChatMessage cm_for_others=new ChatMessage(uid,"[Пользователь вышел из игры]",TimeUtils.now_sec(),ChatMessage.TYPE_DISCONNECT,null,(long)0);
        sendToAll(pid, uid, cm_for_others, userSession);
    }
 
    @OnMessage
    public void OnMessage(String message) {        
        System.out.println("OnMessage " +message);          
    }
 
    @OnMessage
    public void onMessage(ByteBuffer byteBuffer,Session userSession, @PathParam("pid") Byte pid, @PathParam("uid") Long uid) throws UnsupportedEncodingException {   
 
    }
 
    @OnError
    public void onError(Session session, Throwable t) {
        System.out.println("onError " +t.getMessage());          
    }
 
 
 
 
 
}





Вот Демон для раздачи полиса на 843 порту. Он рабочий, вряд ли в нем дело
JAVA:
Код AS3:
package servlets;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
 
import javax.servlet.http.HttpServlet;
 
public class FlashPolicy extends HttpServlet {
        private static final long serialVersionUID = 1L;
        private static ServerSocket serverSock;
        private static boolean listening = true;
        private static Thread serverThread;        
        static {
        try {
        serverThread = new Thread(() -> {
            try {
                serverSock = new ServerSocket(843, 50);                                
                while ( listening ) {
                    final Socket sock = serverSock.accept(); 
                    Thread t = new Thread(() -> {                                      
                      try { sock.setSoTimeout(10000);                                            
                            InputStream in = sock.getInputStream();                                            
                            byte[] buffer = new byte[23];                                            
                            if (1==1) {
                                String str= "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"+"<cross-domain-policy>\n"+"   <site-control permitted-cross-domain-policies=\"all\"/>\n"+"   <allow-access-from domain=\"*\" to-ports=\"*\"/>\n"+"   <allow-http-request-headers-from domain=\"*\" headers=\"*\"/>\n"+"</cross-domain-policy>";
                                try (OutputStream out = sock.getOutputStream()) {
                                PrintStream ps=new PrintStream(out);
                                    ps.write(str.getBytes());
                                    ps.write(0x00);
                                    ps.flush();
                                }catch ( Exception ex ) {}
                            }                                           
                        }
                        catch ( Exception ex ) {}
                        finally {
                            try { sock.close(); } catch ( Exception ex2 ) {}
                        }
                    });
                    t.start();
                }
            }
            catch ( Exception ex ) {}
        });
        serverThread.start();                       
        }
        catch ( Exception ex ) {}
        }
 
        @Override
        public void destroy() {                
                if ( listening ) listening = false;
                if ( !serverSock.isClosed() ) {
                        try { serverSock.close(); } catch ( Exception ex ) {}
                }
        }
}

Код:
Предупреждение: Тайм-аут ожидания файла политики для сокетов в xmlsocket://localhost:8084 (через 3 секунды). Это не должно вызывать проблем. Пояснения см. на веб-странице http://www.adobe.com/go/strict_policy_files_ru.

*** Нарушение изолированной среды ***
Подключение к localhost:8084 разорвано - отсутствуют разрешения для http://cs624920.vk.me/u152812740/76888803c0630b.zip
Ошибка: Запрос ресурса по адресу xmlsocket://localhost:8084 инициатором запроса из http://cs624920.vk.me/u152812740/76888803c0630b.zip отклонен из-за отсутствия разрешений файла политики.

Error #2044: Unhandled securityError:. text=Error #2048: Security sandbox violation: http://cs624920.vk.me/u152812740/76888803c0630b.zip cannot load data from localhost:8084.
++++++++++++++++++++++++++++++++Disconnected
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

Старый 12.12.2014, 12:01
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 2  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Код AS3:
Security.loadPolicyFile("xmlsocket://localhost:843");

Старый 12.12.2014, 12:31
Azo вне форума Посмотреть профиль Отправить личное сообщение для Azo Найти все сообщения от Azo
  № 3  
Ответить с цитированием
Azo
 
Аватар для Azo

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Цитата:
Сообщение от Rzer Посмотреть сообщение
Код AS3:
Security.loadPolicyFile("xmlsocket://localhost:843");
И с этой строчкой и без - флеш же по умолчанию сам должен грузить оттуда
и я пробовал вставлять это. возможно и грузит, но молчит.. перескакивает грузить Полис из порта на котором чат развернут


ну вот еще раз попробовал - все ровно грузит из порта 8084

Код:
Предупреждение: Тайм-аут ожидания файла политики для сокетов в xmlsocket://localhost:8084 (через 3 секунды). Это не должно вызывать проблем. Пояснения см. на веб-странице http://www.adobe.com/go/strict_policy_files_ru.

*** Нарушение изолированной среды ***
Подключение к localhost:8084 разорвано - отсутствуют разрешения для http://cs618217.vk.me/u152812740/2ed4244b9e3479.zip
Ошибка: Запрос ресурса по адресу xmlsocket://localhost:8084 инициатором запроса из http://cs618217.vk.me/u152812740/2ed4244b9e3479.zip отклонен из-за отсутствия разрешений файла политики.

Error #2044: Unhandled securityError:. text=Error #2048: Security sandbox violation: http://cs618217.vk.me/u152812740/2ed4244b9e3479.zip cannot load data from localhost:8084.
++++++++++++++++++++++++++++++++Disconnected
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

Старый 12.12.2014, 23:54
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 4  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Я сейчас CometD занимаюсь, и, признаться, где-то встречал для Bayeux протокола экстэншн флэшового полиси, но не припомню.
У меня вопрос к ТС:
а зачем вэбсокеты ? Я имею в виду в вашем контексте.
Флэш клиент, сокет соединение с любым сокет сервером, написанном на java. Вроде этого же достаточно.
Тот же самый Red5.
Если брать вэбсокеты, то это же гемор еще тот (отсутствие поддержки в старых браузерах, я имею ввиду не флэш клиента)
Если проще: зачем коннектиться флэш клиентом к вэб сокету, если есть RTMP

Старый 13.12.2014, 01:14
Azo вне форума Посмотреть профиль Отправить личное сообщение для Azo Найти все сообщения от Azo
  № 5  
Ответить с цитированием
Azo
 
Аватар для Azo

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Спасибо всем, я уже разобрался.
djyamato, ну red5 и rtmp сложно развернуть
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
crossdomain , java , ServerEndpoint , Tomcat8 , webSocket
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:05.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.