Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   WebSocket не может соединиться (http://www.flasher.ru/forum/showthread.php?t=211332)

Vlad84 06.08.2015 14:28

WebSocket не может соединиться
 
Не могу никак добиться конекта через вебсокет. Локально прекрасно работает, с сервера - кидает ошибку Security sandbox violation.

По идее, хост и порт с сервером и кросдоменом одни и те же, но не работает.

Код AS3:

Security.loadPolicyFile("http://ws.domain.ru:80/crossdomain.xml");
...
var websocket:WebSocket = new WebSocket("ws://ws.domain.ru/ws", "80");


Код:

<?xml version="1.0"?> 
 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
 
<cross-domain-policy> 
  <allow-access-from domain="*" secure="false" to-ports="*"/> 
  <site-control permitted-cross-domain-policies="master-only" /> 
</cross-domain-policy>


bifidokk 07.08.2015 08:39

без кода сервера точно и не скажешь, что у вас там.
по своему опыту, при коннекте к сокету кроссдомен запрашивается у демона сокета, а не просто дергается с домена.

например:
PHP код:

/**
     * Called when new data received.
     * @return void
     */
    
public function onRead()
    {
        
$line $this->read(4096);

        if( 
substr ($line022) == "<policy-file-request/>")
        {
            
$this->write($this->policy->getPolicy());
            return;
        }

        
GameCore::log('Connection sending message '$line);
        
$this->game->work($line);
    } 


Vlad84 07.08.2015 12:17

Кроссдомейн отдается nginx-ом при запросе 843 порта
Код:

server {
    listen 843;
    server_name localhost;

    location / {
        rewrite ^(.*)$ /crossdomain.xml;
    }

    error_page 400 /crossdomain.xml;

    location = /crossdomain.xml {
        root /usr/local/www/crossdomain;
    }
}


Переложил кросcдомейн на 843 порт. Т.е. теперь он отдается и без прямой ссылки на него, вот так
Код AS3:

Security.loadPolicyFile("ws.wsdomain.ru:843");
...
var websocket:WebSocket = new WebSocket("ws://ws.wsdomain.ru/server", "*");


Почему-то клиент лезет за кроссдомейником на 80й порт.
Код:

#2048: Security sandbox violation: http://swfdomain.ru/test.swf cannot load data from ws.wsdomain.ru:80

Мне бы хоть один рабочий пример. Не знаю на кого грешить, на php сервер или на клиента. Как можно протестить?

bifidokk 08.08.2015 10:39

попробуйте вообще выкинуть Security.loadPolicyFile("ws.wsdomain.ru:843");
кроссдомейн и без этого будет клиентом запрашиваться

Vlad84 10.08.2015 13:21

Решил проблему. Косяк был в том, что полиси-файл отдавался nginx-ом, а не вебсоккет сервером :)

bifidokk 11.08.2015 08:51

Цитата:

Сообщение от Vlad84 (Сообщение 1185629)
Решил проблему. Косяк был в том, что полиси-файл отдавался nginx-ом, а не вебсоккет сервером :)

я же выше писал об этом :)


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

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