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

2017-12-22 12:20:21 +08:00
 loginv2

描述
服务器端 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 做过这个东西
有没有具体一点的例子

1451 次点击
所在节点    问与答
1 条回复
loginv2
2017-12-22 13:10:27 +08:00
自问自答好尴尬啊 ...
解决了问题 所以来分享一下

首先是需要建立两个端口的监听 一个是 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 那个服务 就可以了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416793

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX