关于workmanchat前端使用nginx做转发导致的跨域问题

0

在nginx中使用chat.room.com:8020转发到端口7272的时候,有些浏览器会出现以下问题,导致无法建立websocket链接,错误提示如下:


** policy file: xmlsocket://chat.room.com:843


cannot connect to Web Socket server at ws://chat.room.com:8020 (SecurityError: Error #2048)


make sure the server is running and Flash socket policy file is correctly placed**


这个问题应该怎么解决?

已邀请:

walkor

赞同来自:

用workerman提供即可,就下面几行代码


<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';

$flash_policy = new Worker('tcp://0.0.0.0:843');
$flash_policy->onMessage = function($connection, $message)
{
$connection->send('<?xml version="1.0"?><cross-domain-policy><site-control permitted-cross-domain-policies="all"/><allow-access-from domain="_" to-ports="_"/></cross-domain-policy>'."\0");
};

if(!defined('GLOBAL_START'))
{
Worker::runAll();
}

walkor

赞同来自:

要在843端口放置一个policy file文件,这个是flash的安全机制。具体可以网上搜索下

1271281914

赞同来自:

这个监听843端口是用nginx来监听还是用workman来做监听?


这个policy file是不是下面这个?
crossdomain.xml


<?xml version="1.0" ?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="_" to-ports="_" secure="false"/>
<allow-http-request-headers-from domain="_" headers="_"/>
</cross-domain-policy>

1271281914

赞同来自:

还是出现获取不到的错误,错误如下图


图片


图片
图片

1271281914

赞同来自:

搞定了。那个发送还要加一句结束符。


$connection->send("\0");

walkor

赞同来自:

好的,谢谢提醒

要回复问题请先登录注册