V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
loginv2
V2EX  ›  问与答

有没有人知道用 swoole 做的 websocket 当客户端为 flash 跨域场景下如何实现通信?

  •  
  •   loginv2 · 2017-12-22 12:20:21 +08:00 · 1448 次点击
    这是一个创建于 2310 天前的主题,其中的信息可能已经有所发展或是发生改变。

    描述
    服务器端 php7.2 swoole 创建了一个 ws://www.aaa.com:8888
    客户端 1 chrome 63 在 http://www.bbb.com/ws.html 下 引用了 websocket-js-1.0.2
    客户端 2 IE8 地址同上 这个时候 websocket-js 采用的是 flash 的通信方案

    问题: 客户端 1 在 html5 下工作正常 客户端 2 在 flash 下 不能跨域传输

    思考方向:经过搜索 发现需要给 flash 跨域的权限( crossdomain.xml )有三种方案
    1 在域名根目录下放 crossdomain.xml
    2 843 端口 通信传输 xml
    3 自定义端口 需要修改 swf 文件

    方案 1 貌似只适用于 http ? 总之因为端口被 ws 占用 没办法另开一个 http
    方案 3 不想改 swf

    但是方案 2 又不知道怎么发?网上的例子大多的 java 的,想问一下有没有人用 php 做过这个东西
    有没有具体一点的例子

    1 条回复    2017-12-22 13:10:27 +08:00
    loginv2
        1
    loginv2  
    OP
       2017-12-22 13:10:27 +08:00   ❤️ 1
    自问自答好尴尬啊 ...
    解决了问题 所以来分享一下

    首先是需要建立两个端口的监听 一个是 ws 的 一个是 843

    这里重点是 843 这个 不可以用 websocket 需要用没有封装过的 socket

    ```php
    $server843 = new swoole_server("0.0.0.0", 843);
    $server843->set(array('worker_num' => 1,));
    $server843->on('receive', function (swoole_server $server843, $fd, $from_id, $data) {
    //这里是 crossdomain.xml 的内容 具体根据自己实际情况改 但是注意结尾需要加一个转义的 0
    $server843->send($fd, "<cross-domain-policy>
    <allow-access-from domain=\"*\" to-ports=\"*\" />
    </cross-domain-policy>\n\0");
    });
    $server843->start();
    ```

    然后单独启动这个服务 。再启动 ws 那个服务 就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2872 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:01 · PVG 12:01 · LAX 21:01 · JFK 00:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.