<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>5min | 光子引擎photonengine中文站</title>
	<atom:link href="https://vibrantlink.com/category/5min/feed/" rel="self" type="application/rss+xml" />
	<link>https://vibrantlink.com</link>
	<description>成都动联无限科技有限公司</description>
	<lastBuildDate>Sun, 05 Oct 2025 07:18:22 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://vibrantlink.com/wp-content/uploads/2017/03/cropped-VL-text-dong-32x32.png</url>
	<title>5min | 光子引擎photonengine中文站</title>
	<link>https://vibrantlink.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">125330554</site>	<item>
		<title>如何在Voice中选择中国区域</title>
		<link>https://vibrantlink.com/chinacloudvoice/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 14 Feb 2018 09:58:30 +0000</pubDate>
				<category><![CDATA[5min]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">https://vibrantlink.com/?p=378</guid>

					<description><![CDATA[<p>地区 Photon Cloud光子云为您提供全球连接，让全球各地的低延迟游戏成为可能。 可用区域 Photon [&#8230;]</p>
The post <a href="https://vibrantlink.com/chinacloudvoice/">如何在Voice中选择中国区域</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></description>
										<content:encoded><![CDATA[<header>
<h1 id="regions__"><span class="notranslate">地区</span></h1>
</header>
<section><span class="notranslate">Photon Cloud光子云为您提供全球连接，让全球各地的低延迟游戏成为可能。</span></p>
<h2 id="available_regions____"><span class="notranslate">可用区域</span></h2>
<p><span class="notranslate">Photon Cloud光子云在多个地区都有服务器，分布在全球多个托管中心。</span></p>
<p><span class="notranslate">每个Photon Cloud光子云区域由“区域标记”标识。</span></p>
<p>可用区域和令牌清单：</p>
<table class="table" width="354">
<thead>
<tr>
<th><span class="notranslate">地区</span></th>
<th><span class="notranslate">托管在</span></th>
<th><span class="notranslate">令牌</span></th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="notranslate">亚洲</span></td>
<td><span class="notranslate">新加坡</span></td>
<td><span class="notranslate">asia</span></td>
</tr>
<tr>
<td><span class="notranslate">澳大利亚</span></td>
<td><span class="notranslate">墨尔本</span></td>
<td><span class="notranslate">au</span></td>
</tr>
<tr>
<td><span class="notranslate">加拿大，东部</span></td>
<td><span class="notranslate">蒙特利尔</span></td>
<td><span class="notranslate">cae</span></td>
</tr>
<tr>
<td><span class="notranslate"><strong>中国大陆</strong>（ 请见本文末）</span></td>
<td>上海BGP</td>
<td><span class="notranslate">cn</span></td>
</tr>
<tr>
<td><span class="notranslate">欧洲</span></td>
<td><span class="notranslate">阿姆斯特丹</span></td>
<td>eu</td>
</tr>
<tr>
<td><span class="notranslate">印度</span></td>
<td><span class="notranslate">钦奈</span></td>
<td><span class="notranslate">in</span></td>
</tr>
<tr>
<td><span class="notranslate">日本</span></td>
<td><span class="notranslate">东京</span></td>
<td><span class="notranslate">jp</span></td>
</tr>
<tr>
<td><span class="notranslate">南美洲</span></td>
<td><span class="notranslate">圣保罗</span></td>
<td><span class="notranslate">sa</span></td>
</tr>
<tr>
<td><span class="notranslate">韩国</span></td>
<td><span class="notranslate">汉城</span></td>
<td><span class="notranslate">kr</span></td>
</tr>
<tr>
<td><span class="notranslate">美国，东部</span></td>
<td><span class="notranslate">华盛顿</span></td>
<td><span class="notranslate">us</span></td>
</tr>
<tr>
<td><span class="notranslate">美国，西部</span></td>
<td><span class="notranslate">圣荷西</span></td>
<td><span class="notranslate">usw</span></td>
</tr>
</tbody>
</table>
<h3 id="dashboard_regions_filtering_______"><span class="notranslate">仪表板区域过滤</span></h3>
<p><span class="notranslate">您可以直接从仪表板过滤每个应用程序的可用Photon Cloud光子云区域列表。</span></p>
<figure id="attachment_368" aria-describedby="caption-attachment-368" style="width: 724px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="size-full wp-image-368" src="https://vibrantlink.com/wp-content/uploads/2018/02/regions_dashboard_filtering.png" alt="过滤光子云区域" width="724" height="459" srcset="https://vibrantlink.com/wp-content/uploads/2018/02/regions_dashboard_filtering.png 724w, https://vibrantlink.com/wp-content/uploads/2018/02/regions_dashboard_filtering-300x190.png 300w" sizes="(max-width: 724px) 100vw, 724px" /><figcaption id="caption-attachment-368" class="wp-caption-text">过滤光子云区域</figcaption></figure>
<p><span class="notranslate">转到仪表板，然后单击所选应用程序的“管理”，然后单击“编辑”。</span> <span class="notranslate">您将找到一个输入字段，您可以在其中输入列入白名单的区域，如下所示：</span></p>
<ul>
<li><span class="notranslate">允许的列表应该是用分号分隔的区域标记字符串。</span> <span class="notranslate">例如“eu; us”。</span></li>
<li><span class="notranslate">区域令牌不区分大小写，并在此定义。</span></li>
<li><span class="notranslate">未定义或无法识别的区域令牌将从列表中忽略。</span></li>
<li><span class="notranslate">空（“”）或格式不正确的字符串（例如“;;”）表示空列表。</span></li>
<li><span class="notranslate">空列表表示允许所有可用区域。</span></li>
</ul>
<p><span class="notranslate">确认并保存后， GetRegions操作将只返回过滤的区域列表。</span> <span class="notranslate">因此，客户端应该从该列表中选择任何可用的区域，但请考虑到</span><span class="notranslate">仪表盘的更新可能需要10分钟左右的时间（根据网络情况而定）。</span></p>
<h2 id="using_the_chinese_mainland_region________"><span class="notranslate">使用中国大陆地区</span></h2>
<div class="alert alert-info"><span class="notranslate">首先，您需要申请访问中国大陆地区的Photon应用程序。</span> <span class="notranslate"><a href="https://vibrantlink.com/contact" target="_blank" rel="noopener">向我们发送电子邮件，以便我们可以为您的AppID解锁它。</a></span></div>
<p><span class="notranslate">为了稳定和可靠的链接，光子NameServer架设在本地，否则连接很可能无法稳定。</span> 中国的NameServer<span class="notranslate">是“ns.photonengine.cn”。</span></p>
<p><span class="notranslate">与来自中国大陆以外的客户端通讯很可能不会产生好的结果。</span> <span class="notranslate">此外，从光子服务器连接到中国大陆以外的服务器（例如，自定义身份验证，WebHooks，WebRPC）可能并不可靠。</span></p>
<blockquote>
<div class="alert alert-warning"><span class="notranslate"><b>重要提示</b> ：在目前阶段，您通过信息中心对应用进行的更改不会自动反映在中国的应用缓存中。</span> <span class="notranslate">如果您有更新请求，请通过电子邮件通知我们。</span></div>
</blockquote>
<p><span class="notranslate">同样出于法律原因，您需要为中国单独构建AppId，我们建议使用单独的AppId。</span> <span class="notranslate">例如，使用条件编译（您选择的）来根据根据条件更改AppId和Photon NameServer。</span></p>
<p><span class="notranslate">按照这些说明为中国市场打造特别版本：</span></p>
<h3 id="photon_voice____"><span class="notranslate">光子语音 Photon Voice</span></h3>
<p><span class="notranslate">1. 将AppId设置为已解锁中国区域的应用程序。</span> <span class="notranslate">如果你想使用相同的项目，并有不同的Build，可以这样设置：</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">void Awake()
{
// TODO: replace compile condition with your own
#if CHINA
    PhotonNetwork.PhotonServerSettings.VoiceAppID = "ChinaVoiceAppId"; // TODO: replace with your own AppId
#else
    PhotonNetwork.PhotonServerSettings.VoiceAppID = "nonChinaVoiceAppId"; // TODO: replace with your own AppId
#endif
}</pre>
<p>2. 打开 &#8220;LoadBalancingClient.cs &#8220;文件，设置NameServerHost为 &#8220;ns.photonengine.cn&#8221;。</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">// TODO: replace compile condition with your own
    #if CHINA
        public const string NameServerHost = "ns.photonengine.cn";
    #else
        public const string NameServerHost = "ns.exitgames.com";
    #endif</pre>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp">
<span class="notranslate">由于光子语音中包含光子PUN，因此我们还需要遵循PUN所需的步骤。</span> 光子语音<span class="notranslate">将自动连接到相同的服务器。</span></pre>
<h3 id="pun_pun"><span class="notranslate">PUN</span></h3>
<p><span class="notranslate">1. 将AppId设置为已解锁中国区域的应用程序。</span> <span class="notranslate">如果你想使用相同的项目，并有不同的Build，可以这样设置：</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">void Awake()
{
// TODO: replace compile condition with your own
#if CHINA
    PhotonNetwork.PhotonServerSettings.AppID = "ChinaPUNAppId"; // TODO: replace with your own AppId
#else
    PhotonNetwork.PhotonServerSettings.AppID = "nonChinaPUNAppId"; // TODO: replace with your own AppId
#endif
}</pre>
<p>2. 打开“NetworkingPeer.cs”文件并将<code>NameServerHost</code>设置为“ns.photonengine.cn”：</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">// TODO: replace compile condition with your own
    #if CHINA
        public const string NameServerHost = "ns.photonengine.cn";
    #else
        public const string NameServerHost = "ns.exitgames.com";
    #endif</pre>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">
3. 更新<code>CloudRegionCode</code>和<code>CloudRegionFlag</code>枚举以添加新的“CN”（或“cn”）区域标记，如下所示：</pre>
<div>
<div id="highlighter_917422" class="syntaxhighlighter csharp">
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">public enum CloudRegionCode
{
    // ...
// TODO: replace compile condition with your own
#if CHINA
    ///&lt;summary&gt;Chinese Mainland, Guang Dong area, cn&lt;/summary&gt;
    cn = 11,
#endif
};
[Flags]
public enum CloudRegionFlag
{
    // ...
// TODO: replace compile condition with your own
#if CHINA
    cn = 1 &lt;&lt; 10,
#endif
};</pre>
<p>4. 使用<code>PhotonNetwork.ConnectToRegion(CloudRegionCode.cn, gameVersion)</code>连接到中国大陆地区。</p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">// TODO: replace compile condition with your own
#if CHINA
    PhotonNetwork.ConnectToRegion(CloudRegionCode.cn, gameVersion);
#else
    // TODO: connect to any other region
#endif</pre>
</div>
</div>
</section>The post <a href="https://vibrantlink.com/chinacloudvoice/">如何在Voice中选择中国区域</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">378</post-id>	</item>
		<item>
		<title>光子云还是光子服务器？</title>
		<link>https://vibrantlink.com/cloudorserver/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Fri, 05 Jan 2018 03:00:59 +0000</pubDate>
				<category><![CDATA[5min]]></category>
		<category><![CDATA[Blog]]></category>
		<guid isPermaLink="false">http://vibrantlink.com/?p=355</guid>

					<description><![CDATA[<p>Photon Cloud是一个完全托管的软件即服务（SaaS）解决方案。 您可以完全专注于您的应用程序客户端， [&#8230;]</p>
The post <a href="https://vibrantlink.com/cloudorserver/">光子云还是光子服务器？</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></description>
										<content:encoded><![CDATA[<p><strong>Photon Cloud</strong>是一个完全托管的软件即服务（SaaS）解决方案。 您可以完全专注于您的应用程序客户端，而机房托管，服务器操作和调整都由光子公司负责。</p>
<p><strong>Photon Server</strong>是一个您自己运行和维护的本地服务器应用程序，您可以在您选择的机器（包括各类云服务器和虚拟机）上运行和托管。 所以其是您完全可定制的，且完整的用户认证机制能让你的自由配置和设置你自己的多人游戏服务器端。</p>
<p><strong>Photon Cloud</strong>是在运行在<strong>Photon Server</strong>上的。</p>
<figure id="attachment_622" aria-describedby="caption-attachment-622" style="width: 580px" class="wp-caption aligncenter"><img decoding="async" class="size-full wp-image-622" src="https://vibrantlink.com/wp-content/uploads/2018/01/photon-product-software-layers_new.jpg" alt="光子服务器光子云构架" width="580" height="426" srcset="https://vibrantlink.com/wp-content/uploads/2018/01/photon-product-software-layers_new.jpg 580w, https://vibrantlink.com/wp-content/uploads/2018/01/photon-product-software-layers_new-300x220.jpg 300w" sizes="(max-width: 580px) 100vw, 580px" /><figcaption id="caption-attachment-622" class="wp-caption-text">光子服务器光子云构架</figcaption></figure>
<p>&nbsp;</p>
<p>光子云(Photon Cloud)运行在光子服务器(Photon Server)上。<br />
Photon Realtime，Photon Chat都是在光子云(Photon Cloud)中运行的应用程序。<br />
Photon Unity Networking（又名PUN）是Unity 3D客户端插件，与Unity Networking兼容的API，连接Photon Realtime。</p>
<table class="table table-striped">
<thead>
<tr>
<th width="16%"></th>
<th style="text-align: center;" width="42%"><span class="notranslate">光子云</span></th>
<th style="text-align: center;" width="42%"><span class="notranslate">光子服务器</span></th>
</tr>
</thead>
<tbody>
<tr>
<td class="strong"><span class="notranslate">服务器管理</span></td>
<td>再没有管理服务器的杂乱，您只需专注于游戏性和创意<span class="notranslate">，而我们的专家负责顺畅运行服务器的问题。</span></td>
<td><span class="notranslate">您可以获得为应用程序运行Photon的全部权限。在</span><span class="notranslate">自己的服务器或租用的服务器或云上运行，需确保它们是状态良好的。</span></p>
<p><span class="notranslate">Photon的日志和性能计数器提供关于性能和稳定性的所有必要信息。</span></td>
</tr>
<tr>
<td class="strong"><span class="notranslate">可扩展性</span></td>
<td><span class="notranslate">Photon Cloud会自动扩展以适应您的用户。</span><br />
<span class="notranslate">使用我们的SDK，您的客户端应用程序将获得高效的负载平衡工作流。</span></td>
<td><span class="notranslate">启用我们在源码中的负载平衡，</span><span class="notranslate">它是您中大型应用跨多个服务器扩展的坚实基础。</span><br />
<span class="notranslate">需要留意的是为您正扩展的客户数量而添加正确数量的服务器。</span></td>
</tr>
<tr>
<td class="strong"><span class="notranslate">游戏逻辑</span></td>
<td><span class="notranslate">通过Photon Realtime ， Photon Chat和PUN，您将获得目前所有多人游戏类型的解决方案。</span> <span class="notranslate">每个<a href="http://vibrantlink.com/resource-links/" target="_blank" rel="noopener">可供免费下载的客户端SDK</a>包含多个源代码示例，让您开始真正快速地将Photons API用于同步和异步游戏，及应用程序中。</span></td>
<td><span class="notranslate">服务器的逻辑可以在C＃中完全自定义。</span> <span class="notranslate">在<a href="http://vibrantlink.com/5minsphotonserver/">免费的服务器SDK中</a>提供了多个演示应用程序的源代码，并为您的应用程序提供了高性能的现成框架。</span> <span class="notranslate">受益于我们的协议和抽象的低级功能，您不会错过任何重要功能。</span></td>
</tr>
<tr>
<td class="strong"><span class="notranslate">立即开始</span></td>
<td><span class="notranslate">Photon Cloud让您注册并立即运行您的应用程序。</span><span class="notranslate">无需设置。无需使用自己的</span><span class="notranslate">服务器。</span></td>
<td><span class="notranslate">下载后， <a href="/5minsphotonserver" target="_blank" rel="noopener">在5分钟内启动您的Photon服务器</a> 。</span><span class="notranslate">Photon非常容易设置，并在本地和远程部署都运行良好。</span></td>
</tr>
<tr>
<td class="strong"><span class="notranslate">许可</span></td>
<td><span class="notranslate">选择各种订阅方案，匹配您的每月活跃用户数量。</span><br />
<span class="notranslate">无论您是独立，创业或AAA工作室，您都会找到一个匹配的计划。</span> <span class="notranslate"><a href="http://vibrantlink.com/photoncloud/" target="_blank" rel="noopener">Photon Realtime拥有最多20 CCU的免费计划。</a></span></td>
<td><span class="notranslate">许可作为一次性购买或订阅提供，并作为下载提供。</span><br />
<span class="notranslate">使用企业许可证可托管任意数量的服务器和应用程序。</span> <span class="notranslate"><a href="http://vibrantlink.com/photonserver/" target="_blank" rel="noopener">Photon Server需要有效的许可证才能运行。</a></span></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3>光子服务器PhotonServer v5</h3>
<table class="table table-centered">
<thead>
<tr>
<th class="empty"></th>
<th>Photon Cloud 光子云</th>
<th>Photon Server 光子服务器</th>
</tr>
</thead>
<tbody>
<tr>
<th class="crossheading" style="text-align: center;" colspan="3">特征</th>
</tr>
<tr>
<th>虚拟应用</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Name Server</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th class="crossheading" colspan="3">支持的光子产品</th>
</tr>
<tr>
<th>Realtime</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th>PUN</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th>Chat</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Voice</th>
<td style="text-align: center;">O(非cn区域)</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th style="text-align: center;">Bolt</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th class="crossheading" style="text-align: center;" colspan="3">验证方式</th>
</tr>
<tr>
<th>自定义</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th>Facebook</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th>Oculus</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Steam</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th>Xbox</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>PlayStation</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Nintendo</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3>光子服务器PhotonServer v4</h3>
<table class="table table-centered">
<thead>
<tr>
<th class="empty"></th>
<th>Photon Cloud 光子云</th>
<th>Photon Server 光子服务器</th>
</tr>
</thead>
<tbody>
<tr>
<th class="crossheading" style="text-align: center;" colspan="3">特征</th>
</tr>
<tr>
<th>虚拟应用</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Name Server</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th class="crossheading" colspan="3">支持的光子产品</th>
</tr>
<tr>
<th>Realtime</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th>PUN</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th>Chat</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Voice</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th style="text-align: left;">Bolt</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th class="crossheading" style="text-align: center;" colspan="3">验证方式</th>
</tr>
<tr>
<th>自定义</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">O</td>
</tr>
<tr>
<th>Facebook</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Oculus</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Steam</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Xbox</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>PlayStation</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
<tr>
<th>Nintendo</th>
<td style="text-align: center;">O</td>
<td style="text-align: center;">X</td>
</tr>
</tbody>
</table>
<h4><span class="">自V4.0.29.11263起的重要更改</span></h4>
<p>Photon Cloud会不断更新，包括修补程序，增强功能或新功能。尽管我们尝试发布Photon Server SDK的新版本以赶上Photon Cloud，但两者无法始终保持同步。</p>
<p>在这里，我们列出了自Photon Server SDK的最新公共版本v4.0.29.11263以来Photon Cloud中的重要更改。此外，如果您同时定位在Photon Cloud和Photon Server环境同时开发，或者准备从一个环境切换到另一个环境，此列表将列出一些功能之不同，其在另外的环境中无法正常运行。同时，您可能还会找到响应的解决方法或建议。</p>
<h4><span class="">V4.0.29.11263中缺少的光子云功能</span></h4>
<ul>
<li>创建房间后，便无法更改PlayerTTL和EmptyRoomTTL。它们后来被添加为众所周知的房间属性。</li>
<li>“Delete Null Properties”选项不可用. (<code>RoomOptions.DeleteNullProperties</code>).具有空值的属性将不会被服务器删除。</li>
<li>“Broadcast Properties Change”选项不可用（<code>RoomOptions.BroadcastPropsChangeToAll</code>）。除非使用CAS，否则调用SetProperties的客户端将不会收到PropertiesChange事件。CAS是可以在Photon Cloud和Photon Server之间具有一致的行为一种解决方案。</li>
<li>SQL Lobby中的GetGameList操作（也称为“ GetCustomRoomList”或“ GetRoomList”，不要与<a href="https://doc.photonengine.com/en-us/realtime/current/gameplay/web-extensions/webrpc#getgamelist" target="_blank" rel="noopener">GetGameList WebRPC</a>或<a href="https://doc-api.photonengine.com/en/pun/v1/class_photon_network.html#aeef2085375accb7d4bc88e60cbe15eb9" target="_blank" rel="noopener">PUN Classic的GetRoomList</a>混淆）不可用。</li>
</ul>
<h4>V4.0.29.11263中的已知问题</h4>
<ul>
<li>如果客户端或身份验证未设置，则服务器不会返回UserId。该值将是在服务器上生成的GUID。这可能导致玩家无法加入房间，并产生错误代码-2（错误消息：&#8221;Join failed: UserId is not set, checkUserIdOnJoin=true expects a UserId.&#8221;）。作为解决方法，如果用户未明确设置，客户端C＃SDK现在会将GUID发送为UserId。</li>
<li>另外，在身份验证期间，如果身份验证提供方未设置昵称，则服务器将返回空昵称，该昵称将覆盖客户端上以前设置的任意值。作为解决方法，您可以在连接后设置一个昵称。此值将在房间内使用，且以后可以更改（包括同步）。</li>
<li>服务器不支持序列化协议版本1.8。如果尝试从客户端SDK的相对较新版本（其默认为1.8）连接到自托管的Photon Server，则连接将失败。在C＃SDK中，客户端将与断开连接<code>DisconnectByServerReasonUnknown</code>。一种解决方案是在连接之前将版本设置为1.6。设置<code>loadBalancingClient.LoadBalancingPeer.SerializationProtocolType</code>到<code>SerializationProtocol.GpBinaryV16</code>。在PUN2中，它应该是<code>PhotonNetwork.NetworkingClient.LoadBalancingPeer.SerializationProtocolType</code>。除非您使用不同于<code>PhotonNetwork.ConnectUsingSettings()</code>的方法进行连接，否则在PUN2中不需要。</li>
<li>服务器允许将同一actor添加到同一interest group多次，从而导致同一事件被actor多次发送到同一interest gruop。</li>
<li>此服务器未完全支持快速重新加入功能（<code>ReconnectAndRejoin</code>），因为其未实现会话令牌。</li>
</ul>The post <a href="https://vibrantlink.com/cloudorserver/">光子云还是光子服务器？</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">355</post-id>	</item>
		<item>
		<title>如何在Realtime中选择中国区域</title>
		<link>https://vibrantlink.com/chinacloudrealtime/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 23 Mar 2017 15:21:22 +0000</pubDate>
				<category><![CDATA[5min]]></category>
		<category><![CDATA[PhotonCloud]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">http://vibrantlink.com/?p=299</guid>

					<description><![CDATA[<p>关于地区 Photon Cloud为您提供全球连接，以便在全球范围内实现低延迟游戏。 客户端的初始连接转到Ph [&#8230;]</p>
The post <a href="https://vibrantlink.com/chinacloudrealtime/">如何在Realtime中选择中国区域</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></description>
										<content:encoded><![CDATA[<h3>关于地区</h3>
<p>Photon Cloud为您提供全球连接，以便在全球范围内实现低延迟游戏。</p>
<p>客户端的初始连接转到Photon Nameserver，它为客户端提供可用区域列表。 通常，客户端连接启用“最佳区域”选择，这将帮助客户端检测具有最低ping的区域并连接到它（见下文）。</p>
<p>每个区域与其他区域完全分开，由主服务器（用于配对）和游戏服务器（用于托管房间）组成。</p>
<figure id="attachment_301" aria-describedby="caption-attachment-301" style="width: 660px" class="wp-caption aligncenter"><img decoding="async" class="wp-image-301 size-full" src="https://vibrantlink.com/wp-content/uploads/2017/03/photon-cloud-connect-name-server.png" alt="" width="660" height="289" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/photon-cloud-connect-name-server.png 660w, https://vibrantlink.com/wp-content/uploads/2017/03/photon-cloud-connect-name-server-300x131.png 300w" sizes="(max-width: 660px) 100vw, 660px" /><figcaption id="caption-attachment-301" class="wp-caption-text">连接到光子云区域</figcaption></figure>
<p>可用区域的完整列表如下。 在仪表板中，您可以定义哪些区域应该可供客户端使用。</p>
<h3>最佳区域的考虑</h3>
<p>“最佳区域”选项不具有确定性。 有时它可能是“随机的”，因为有时候/某种情况下会得到几乎没有变化或完全相同的ping计算。</p>
<p>从理论上讲，你可以发现：</p>
<ul>
<li>同一设备对您可选择的多个区域具有相同的完全ping值。所以您最终连接到同一个网络的客户端上设置了不同区域，造成区域选择会是随机的。</li>
<li>不同的设备连接到同一个区域，有不同的Ping值（或者同一个设备的多次不同尝试)。</li>
</ul>
<p>例如，在“us”和“usw”（或“ru”和“rue”）的设置下，您可以使用在线区域白名单来选择您想要连接或者排除的区域。</p>
<h3>可用区域</h3>
<p>Photon Cloud在全球多个地区拥有服务器，并分布在世界各地有多个托管中心。</p>
<p>每个光子云区域由“区域令牌”标识。</p>
<p>要通过客户端的“Connect”方法传递&#8221;region token&#8221;区域令牌，请调用</p>
<pre class="EnlighterJSRAW" data-enlighter-theme="twilight">loadBalancingClient.ConnectToRegionMaster(regionString);</pre>
<p>可用区域和令牌清单：</p>
<table class="table">
<thead>
<tr>
<th><span class="notranslate">区域</span></th>
<th><span class="notranslate">位置</span></th>
<th>令牌</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="notranslate">亚洲</span></td>
<td><span class="notranslate">新加坡</span></td>
<td><span class="notranslate">ASIA</span></td>
</tr>
<tr>
<td><span class="notranslate">澳大利亚</span></td>
<td><span class="notranslate">墨尔本</span></td>
<td><span class="notranslate">AU</span></td>
</tr>
<tr>
<td><span class="notranslate">加拿大，东部</span></td>
<td><span class="notranslate">蒙特利尔</span></td>
<td><span class="notranslate">CAE</span></td>
</tr>
<tr>
<td><span class="notranslate">中国大陆</span></td>
<td><span class="notranslate">上海</span></td>
<td><span class="notranslate">CN</span></td>
</tr>
<tr>
<td><span class="notranslate">欧洲</span></td>
<td><span class="notranslate">阿姆斯特丹</span></td>
<td>EU</td>
</tr>
<tr>
<td><span class="notranslate">印度</span></td>
<td><span class="notranslate">金奈</span></td>
<td><span class="notranslate">IN</span></td>
</tr>
<tr>
<td><span class="notranslate">日本</span></td>
<td><span class="notranslate">东京</span></td>
<td><span class="notranslate">JP</span></td>
</tr>
<tr>
<td><span class="notranslate">俄国</span></td>
<td><span class="notranslate">莫斯科</span></td>
<td><span class="notranslate">RU</span></td>
</tr>
<tr>
<td><span class="notranslate">俄罗斯东部</span></td>
<td><span class="notranslate">哈巴罗夫斯克</span></td>
<td><span class="notranslate">RUE</span></td>
</tr>
<tr>
<td><span class="notranslate">南美洲</span></td>
<td><span class="notranslate">圣保罗</span></td>
<td><span class="notranslate">SA</span></td>
</tr>
<tr>
<td><span class="notranslate">韩国</span></td>
<td><span class="notranslate">汉城</span></td>
<td><span class="notranslate">KR</span></td>
</tr>
<tr>
<td><span class="notranslate">美国，东部</span></td>
<td><span class="notranslate">华盛顿</span></td>
<td><span class="notranslate">US</span></td>
</tr>
<tr>
<td><span class="notranslate">美国，西部</span></td>
<td><span class="notranslate">圣荷西</span></td>
<td><span class="notranslate">USW</span></td>
</tr>
</tbody>
</table>
<h3></h3>
<h3></h3>
<h3><span class="notranslate">控制面板区域过滤</span></h3>
<p><span class="notranslate">您可以直接从您账户的控制面板（仪表盘）过滤每个应用程序可用的Photon Cloud区域列表。</span></p>
<figure id="attachment_341" aria-describedby="caption-attachment-341" style="width: 724px" class="wp-caption aligncenter"><a href="http://vibrantlink.com/chinacloudrealtime/regions_dashboard_filtering/" rel="attachment wp-att-341"><img loading="lazy" decoding="async" class="wp-image-341 size-full" src="http://vibrantlink.com/wp-content/uploads/2017/03/regions_dashboard_filtering.png" alt="光子云区域设定截图" width="724" height="459" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/regions_dashboard_filtering.png 724w, https://vibrantlink.com/wp-content/uploads/2017/03/regions_dashboard_filtering-300x190.png 300w" sizes="auto, (max-width: 724px) 100vw, 724px" /></a><figcaption id="caption-attachment-341" class="wp-caption-text">设定可用的光子云区域</figcaption></figure>
<p><span class="notranslate">转到仪表板，然后单击所选应用程序的“管理”，然后单击“编辑”。</span> <span class="notranslate">您将找到一个输入字段，您可以在其中输入列入白名单的区域，如下所示：</span></p>
<ul>
<li><span class="notranslate">允许的列表应该是用分号分隔的区域标记字符串。</span> <span class="notranslate">例如“eu; us”。</span></li>
<li><span class="notranslate">区域令牌不区分大小写，并在此定义。</span></li>
<li><span class="notranslate">未定义或无法识别的区域令牌将从列表中忽略。</span></li>
<li><span class="notranslate">空（“”）或格式不正确的字符串（例如“;;”）表示空列表。</span></li>
<li><span class="notranslate">空列表表示允许所有可用区域。</span></li>
</ul>
<p><span class="notranslate">确认并保存后， <span style="color: #ff6600;">GetRegions</span>操作将只返回过滤的区域列表。</span> <span class="notranslate">因此，客户端应该从该列表中选择任何可用的区域，但请考虑到</span><span class="notranslate">仪表盘的更新可能需要10分钟左右的时间（根据网络情况而定）。</span></p>
<h3>如何选择一个地区</h3>
<p><span class="notranslate">如果连接到Photon Cloud CN地区，国内区域用户的延迟最低，非常</span><span class="notranslate">简单的逻辑。</span></p>
<p><i id="geoloadbalancing"></i><span class="notranslate">但是如果你有来自世界各地的用户呢？</span></p>
<p><span class="notranslate">您可以</span></p>
<ul>
<li><span class="notranslate">a）让游戏客户端ping不同的Photon Cloud区域，并预先选择最好的ping，阅读我们在文章下方提供的操作方法</span></li>
<li><span class="notranslate">b）使用固定了区域的客户端版本，因此来自不同地区的用户连接到不同的Photon Cloud区域</span></li>
<li><span class="notranslate">c）让用户从游戏菜单中选择一个匹配区域。</span></li>
</ul>
<p><span class="notranslate">或者，您可以d）让所有用户连接到相同的地区，如果您的游戏玩家可以接受更高的延迟时间，例如任何“不那么实时”的游戏。</span></p>
<p><span class="notranslate">所有Photon Cloud应用程序都可在所有可用区域工作，无需任何额外费用。</span> 查看<span class="notranslate"><a href="http://vibrantlink.com/photoncloud/" target="_blank" rel="noopener">价格</a>。</span></p>
<p><span class="notranslate">Photon Cloud的仪表板可让您监控每个地区的游戏使用情况，轻松升级或降级您的订阅计划。</span> <span class="notranslate"><a href="https://www.photonengine.com/en-us/dashboard/realtime" target="_blank" rel="noopener">转到您的仪表盘</a>。</span></p>
<h3></h3>
<h3><span class="notranslate">如何以最低延迟开始游戏</span></h3>
<p><img loading="lazy" decoding="async" class="wp-image-301 size-full aligncenter" style="font-size: 16px;" src="https://vibrantlink.com/wp-content/uploads/2017/03/photon-cloud-connect-name-server.png" alt="" width="660" height="289" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/photon-cloud-connect-name-server.png 660w, https://vibrantlink.com/wp-content/uploads/2017/03/photon-cloud-connect-name-server-300x131.png 300w" sizes="auto, (max-width: 660px) 100vw, 660px" /></p>
<h3><span class="notranslate">连接到最近的主服务器</span></h3>
<blockquote>
<p class="alert alert-warning"><span class="notranslate">光子不建议使用通用的区域主服务器地址与主服务器的直接连接方法。</span> <span class="notranslate">而是使用SDK提供的方法连接到您正在使用的区域主机！</span></p>
</blockquote>
<p><span class="notranslate">如果您知道您的客户端连接到的最接近的区域，则可以只连接到该区域。</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">loadBalancingClient.ConnectToRegionMaster("us");</pre>
<p><span class="notranslate"><em>对于其他平台，请从SDK列表中链接到相应的SDK和API 。</em></span></p>
<p><span class="notranslate">SDK将从名称服务器（NameServer)获取所请求区域的主服务器地址（上图“连接到Photon Cloud地区”中的数字1），然后自动将您连接到所选区域中的主服务器（上图“连接到Photon Cloud地区”中的数字2）。</span></p>
<h3><span class="notranslate">如何在运行时选择一个区域</span></h3>
<p><span class="notranslate">如果要在运行时选择区域 &#8211; 例如，通过向玩家显示可用区域列表并让其选择，则需要先连接到名称服务器。</span> <span class="notranslate">然后，您可以向名称服务器查询当前可用的区域主服务器地址列表（上面代码范例中的“ConnectToRegionMaster”）。</span></p>
<blockquote><p><span class="notranslate">当我们写“名称服务器”时，名称服务器实际上是在可用区域之间的地理位置负载平衡。</span> <span class="notranslate">这样可以尽可能快地请求主服务器的地址。</span></p></blockquote>
<h3>C#客户端SDK</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">loadBalancingClient.ConnectToNameServer()</pre>
<p>连接成功后，您可以获得可用区域的列表。</p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">loadBalancingClient.OpGetRegions()</pre>
<p><span class="notranslate">使用主服务器列表，您现在可以ping所有来可用区域查找最佳连接时间，以达到最低延迟的游戏时间，或者让玩家选择一个区域。</span></p>
<p><span class="notranslate">当您的客户端确定该区域时，连接到该区域的主服务器（图“连接到Photon Cloud地区”中的数字2）。</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">loadBalancingClient.ConnectToRegionMaster("us")</pre>
<p>最后，加入或创建一个游戏的空间（图“连接到Photon Cloud地区”中的数字3）。</p>
<h3></h3>
<h3>C++客户端SDK</h3>
<p><span class="notranslate">1.确保您连接到Photon Cloud。</span> <span class="notranslate"><strong>Photon Server不支持云区域</strong>。</span></p>
<p><span class="notranslate">2.类</span><span style="color: #ff6600;">Client</span><span class="notranslate">的构造方法有两个可选参数。</span> <span class="notranslate">最后一个，称为</span><span style="color: #ff6600;">regionSelectionMode</span><span class="notranslate"> ，其中一个值来自</span><span style="color: #ff6600;">LoadBalancing::RegionSelectionMode</span><span class="notranslate"> ，默认值为</span><span style="color: #ff6600;">RegionSelectionMode::DEFAULT</span><span class="notranslate"> 。</span> <span class="notranslate">请明确地传递</span><span style="color: #ff6600;">RegionSelectionMode::SELECT</span><span class="notranslate"> 的参数。</span></p>
<p><span class="notranslate">3.在通过调用</span><span style="color: #ff6600;">Client::connect()</span><span class="notranslate">触发的连接流程中，客户端从名称服务器接收可用区域的列表。</span> <span style="color: #ff6600;">Listener</span><span class="notranslate">声明一个可选的回调</span><span style="color: #ff6600;">Listener::onAvailableRegions()</span><span class="notranslate"> 。</span> <span class="notranslate">如果您已经为</span><span style="color: #ff6600;">regionSelectionModei</span><span class="notranslate">传递了</span><span style="color: #ff6600;">RegionSelectionMode::SELECT </span><span class="notranslate">，那么</span><span style="color: #ff6600;">Client</span><span class="notranslate">将不会自动选择该可用区域列表中的一个项目，而是将列表传递给该回调。</span> <span class="notranslate">因此在您的</span><span style="color: #ff6600;">Listener</span><span class="notranslate">实现中，您应该使用有意义的实现来覆盖该回调的空默认实现，根据您可以提出的任何条件选择一个区域。</span></p>
<p><span class="notranslate">4.连接流程完全停止，直到选择了一个区域。</span></p>
<p><span class="notranslate">5.将所选区域传递给</span><span style="color: #ff6600;">Client::selectRegion()</span><span class="notranslate">以继续连接流程。</span></p>
<p><span class="notranslate">注意：只有在收到对</span><span style="color: #ff6600;">Listener::onAvailableRegions()</span><span class="notranslate">调用之后， </span><span style="color: #ff6600;">selectRegion()</span><span class="notranslate">调用</span><span style="color: #ff6600;">selectRegion()Listener::onAvailableRegions() </span><span class="notranslate">（直接从此回调期间或之后的回调</span><span style="color: #ff6600;">selectRegion()</span><span class="notranslate">返回后直接调用</span><span style="color: #ff6600;">selectRegion() </span><span class="notranslate">）。</span> <span class="notranslate">否则，客户端不会处于连接流程的正确阶段，进行区域选择。</span></p>
<p><span style="color: #ff6600;">Listener::onAvailableRegions()</span><span class="notranslate">的示例实现可以在Client SDK中的demo_loadBalancing的源代码中找到：</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="twilight">void NetworkLogic::onAvailableRegions(const ExitGames::Common::JVector&lt;ExitGames::Common::JString&gt;&amp; availableRegions, const ExitGames::Common::JVector&lt;ExitGames::Common::JString&gt;&amp; availableRegionServers)
{
    EGLOG(ExitGames::Common::DebugLevel::INFO, L"%ls / %ls", availableRegions.toString().cstr(), availableRegionServers.toString().cstr());
    mpOutputListener-&gt;writeLine(L"onAvailableRegions: " + availableRegions.toString() + L" / " + availableRegionServers.toString());
    // select first region from list
    mpOutputListener-&gt;writeLine(L"selecting region: " + availableRegions[0]);
    mLoadBalancingClient.selectRegion(availableRegions[0]);
}</pre>
<p><span class="notranslate">请注意，在接收到</span><span style="color: #ff6600;">onAvailableRegions()</span><span class="notranslate">的调用后， </span><span style="color: #ff6600;">selectRegion()</span><span class="notranslate">仅在连接流期间被调用。</span> <span class="notranslate">在任何其他时间或状态下调用它，或者多次调用它来单次调用</span><span style="color: #ff6600;">onAvailableRegions()</span><span class="notranslate">并且不产生未定义的行为。</span></p>
<h3>Objective-C客户端SDK</h3>
<p><span class="notranslate">1.确保您连接到Photon Cloud。</span> <span class="notranslate"><strong>Photon Server不支持云区域</strong>。</span></p>
<p><span class="notranslate">2. </span><span style="color: #ff6600;">EGLoadBalancingClient<span style="color: #000000;">类的</span>EGLoadBalancingClient</span><span class="notranslate">有两个可选参数。</span> <span class="notranslate">最后一个，称为</span><span style="color: #ff6600;">regionSelectionMode</span><span class="notranslate"> ，其中一个值来自</span><span style="color: #ff6600;">EGRegionSelectionMode.h</span><span class="notranslate"> ，默认为</span><span style="color: #ff6600;">EGRegionSelectionMode_DEFAULT</span><span class="notranslate"> 。</span> <span class="notranslate">请明确地传递该参数的</span><span style="color: #ff6600;">EGRegionSelectionMode_SELECT</span><span class="notranslate"> 。</span></p>
<p><span class="notranslate">3.在您通过调用</span><span style="color: #ff6600;">EGLoadBalancingClient::connect()</span><span class="notranslate">触发的连接流程中，客户端从名称服务器接收可用区域的列表。</span><span style="color: #ff6600;">EGLoadBalancingListener</span><span class="notranslate">声明一个可选的回调</span><span style="color: #ff6600;">EGLoadBalancingListener::onAvailableRegions() </span><span class="notranslate">。</span> <span class="notranslate">如果您已经通过了</span><span style="color: #ff6600;">EGRegionSelectionMode_SELECT<span style="color: #000000;">的</span>regionSelectionMode</span><span class="notranslate"> ，那么</span><span style="color: #ff6600;">EGLoadBalancingClient</span><span class="notranslate">将不会自动选择该可用区域列表中的一个项目，而是将列表传递给该回调。</span> <span class="notranslate">因此在您的</span><span style="color: #ff6600;">EGLoadBalancingListener</span><span class="notranslate">实现中，您应该使用有意义的实现来覆盖该回调的空默认实现，根据您可以提出的任何条件选择一个区域。</span></p>
<p><span class="notranslate">4.连接流程完全停止，直到选择了一个区域。</span></p>
<p><span class="notranslate">5.将所选区域传递给</span><span style="color: #ff6600;">EGLoadBalancingClient::selectRegion()</span><span class="notranslate">以继续连接流。</span></p>
<p><span class="notranslate">注意： </span><span style="color: #ff6600;">EGLoadBalancingClient::selectRegion()</span><span class="notranslate">只有在您收到</span><span style="color: #ff6600;">EGLoadBalancingListener::onAvailableRegions() </span><span class="notranslate">（直接从此回调之后调用</span><span style="color: #ff6600;">selectRegion()</span><span class="notranslate">之后（在回调已返回）之后</span><span style="color: #ff6600;">selectRegion()</span><span class="notranslate">调用。</span> <span class="notranslate">否则，客户端不会处于连接流程的正确阶段，供区域选择。</span></p>
<p><span class="notranslate"><code></code></span><span style="color: #ff6600;">EGLoadBalancingListener::onAvailableRegions()</span><span class="notranslate">的示例实现可以在Client SDK中的demo_loadBalancing_objc的源代码中找到：</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="c">- (void) onAvailableRegions:(EGArray*)availableRegions :(EGArray*)availableRegionServers
{
    NSString* r = [availableRegions componentsJoinedByString:@", "];
    NSString* s = [availableRegionServers componentsJoinedByString:@", "];
    EGLOG(EGDbgLvl::INFO, L"onAvailableRegions: %ls / %ls", [r UTF32String], [s UTF32String]);
    [mOutputListener writeLine:@"onAvailableRegions: %@ / %@", r, s];
    // select first region from list
    [mOutputListener writeLine:@"selecting region: %@", availableRegions[0]];
    [mLoadBalancingClient selectRegion:availableRegions[0]];
}</pre>
<p><span class="notranslate">请注意，在接收到</span><span style="color: #ff6600;">onAvailableRegions()</span><span class="notranslate">的调用后， </span><span style="color: #ff6600;">selectRegion()</span><span class="notranslate">仅在连接流期间被调用。</span> <span class="notranslate">在任何其他时间或状态下调用它，或者多次调用它来单次调用</span><span style="color: #ff6600;">onAvailableRegions()</span><span class="notranslate">并且不产生未定义的行为。</span></p>
<h3></h3>
<h3><span class="notranslate">使用中国大陆地区</span></h3>
<div class="alert alert-info"><span class="notranslate">首先，您需要请求访问中国大陆地区的Photon应用程序。</span> <span class="notranslate"><a href="http://vibrantlink.com/contact/" target="_blank" rel="noopener">向我们发送表单，以便我们可以为您的AppID解锁。</a></span></div>
<p><span class="notranslate">光子名称服务器必须在中国本地，否则访问延迟可能会非常高。</span> <span class="notranslate">中国光子的名称服务地址是“ns.photonengine.cn”。</span></p>
<p><span class="notranslate">与中国大陆以外的客户联系很可能不会取得好成绩。</span> <span class="notranslate">此外，从Photon服务器连接到中国大陆以外的服务器（例如，用于自定义认证，WebHooks，WebRPC）可能不可靠。</span></p>
<blockquote><p><span class="notranslate"><b>重要提示</b> ：在当前阶段，您通过信息中心对您的应用进行的更改不会自动反映在中国的应用高速缓存中。</span> <span class="notranslate">如果您有更新请求，请通过电子邮件通知我们。</span></p></blockquote>
<p><span class="notranslate">同样出于法律原因，您需要为中国独立构建独立的Appid，所以我们建议您使用单独的AppId。</span> <span class="notranslate">例如，使用编译条件（您选择的）根据构建来更改AppId和Photon NameServer。</span></p>
<p><span class="notranslate">请注意，如果您连接中国区，请按照以下说明为中国区做出专门设置：</span></p>
<h3>C#客户端SDK</h3>
<p>1.<span class="notranslate">将AppId设置为中国区域解锁的应用程序。</span> <span class="notranslate">如果你想使用相同的项目并且有不同的构建，你可以这样做:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">// TODO: replace compile condition with your own
#if CHINA
    loadBalancingClient.AppID = "ChinaRealtimeAppId"; // TODO: replace with your own AppId
#else
    loadBalancingClient.AppID = "nonChinaRealtimeAppId"; // TODO: replace with your own AppId
#endif</pre>
<p>2.打开“LoadBalancingClient.cs”文件，并将<span style="color: #ff6600;">NameServerHost</span>设置为“<span class="notranslate">ns.photonengine.cn</span>”：</p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">// TODO: replace compile condition with your own
#if CHINA
    public const string NameServerHost = "<span class="notranslate">ns.photonengine.cn</span>";
#else
    public const string NameServerHost = "ns.exitgames.com";
#endif</pre>
<p>3.使用<span style="color: #ff6600;">LoadBalancingClient.ConnectToRegionMaster(&#8220;CN&#8221;)</span>连接中国大陆地区。</p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">// TODO: replace compile condition with your own
#if CHINA
    loadBalancingClient.ConnectToRegionMaster("cn");
#else
    // TODO: connect to any other region
#endif</pre>
<p>C ++客户端SDK</p>
<ul>
<li><span class="notranslate">将参数</span><span style="color: #ff6600;">serverAdress</span><span class="notranslate"> “ns.photonengine.cn”传递给</span><span style="color: #ff6600;">Client::connect()</span><span class="notranslate"> 。</span></li>
<li><span class="notranslate">请确保将参数</span><span style="color: #ff6600;">serverType</span><span class="notranslate">保留在其默认值</span><span style="color: #ff6600;">ServerType::NAME_SERVER </span><span class="notranslate">。</span></li>
</ul>
<p>Objective-C客户端SDK</p>
<ul>
<li><span class="notranslate">将参数</span><span style="color: #ff6600;">serverAdress</span><span class="notranslate"> “ns.photonengine.cn”传递给</span><span style="color: #ff6600;">EGLoadBalancingClient::connect()</span></li>
<li><span class="notranslate">请确保将参数</span><span style="color: #ff6600;">serverType</span><span class="notranslate">保持在默认值</span><span style="color: #ff6600;">EGServerType_NAME_SERVER </span><span class="notranslate">。</span></li>
</ul>The post <a href="https://vibrantlink.com/chinacloudrealtime/">如何在Realtime中选择中国区域</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">299</post-id>	</item>
		<item>
		<title>5分钟部署PhotonCloud</title>
		<link>https://vibrantlink.com/5minsphotoncloud/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Fri, 17 Mar 2017 02:44:03 +0000</pubDate>
				<category><![CDATA[5min]]></category>
		<category><![CDATA[PhotonCloud]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">http://vibrantlink.com/?p=264</guid>

					<description><![CDATA[<p>关于PhotonCloud光子云的区域问题 在您默认开始使用PhotonCloud光子云的时候，区域会被默认为 [&#8230;]</p>
The post <a href="https://vibrantlink.com/5minsphotoncloud/">5分钟部署PhotonCloud</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></description>
										<content:encoded><![CDATA[<h4>关于PhotonCloud光子云的区域问题</h4>
<p><em>在您默认开始使用PhotonCloud光子云的时候，区域会被默认为海外区域，这可能会<span style="color: #ff0000;">严重影响您游戏的连接速度和网络品质</span>。在您通过<a href="http://vibrantlink.com/contact/">中国区邮件申请</a>发送到您的账号名，联络方式和appid给我们之后，1-2个工作日内，我们将为您<span style="color: #ff0000;"><strong>免费开通</strong></span>中国区的PhotonCloud光子云服务（初始限定为20CCU）。</em></p>
<h3 class="p1"><span class="s1">快速开始</span></h3>
<hr />
<p class="p1"><span class="s1">在这篇文章中，您将掌握迅速部署PhotonCloud光子云，并着手于我们的Demo“粒子演示”。</span><span class="s2"> <a href="https://doc.photonengine.com/zh-cn/realtime/current/sdks-and-api/sdks-overview" target="_blank" rel="noopener">我们的SDK</a>附带的演示向您展示了如何在一般的应用环境中如何添加多人功能。 我们将看看基本的Photon操作，并且有什么您马上安装就能使用的便捷功能。</span></p>
<p class="p1"><span class="s2">虽然下面的C＃代码示例是有点专门针对于Photon Unity3D SDK（ <a href="https://www.photonengine.com/realtime/download#unity" target="_blank" rel="noopener">下载</a> ）的，但是下面的基本工作流程（1） 连接 ，（2） 创建房间和（3） 发送事件在各平台的应用之间是通用的。</span></p>
<h3 class="p1"><span class="s1">核心内容</span></h3>
<ul class="ul1">
<li class="li2"><span class="s1">1）连接到主服务器</span></li>
<li class="li2"><span class="s1">2）创建房间/加入房间</span></li>
<li class="li2"><span class="s1">3）发送活动</span></li>
</ul>
<h3 class="p1"><span class="s1">连接到主服务器</span></h3>
<p class="p2"><span class="s2">您需要做的第一件事是将您的客户端连接到云端（光子云）。 我们将此过程称为连接到主服务器。 从那里，主服务器将负责所有客户端到游戏服务器的传输，云中的负载平衡功能负责协调所有可用的房间。</span></p>
<p class="p2"><span class="s2">让我们直接进入我们的演示代码：</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight" data-enlighter-title="C#代码范例">// From GameLogic.cs                        
public GameLogic(string masterAddress, string appId, string gameVersion) : base(masterAddress, appId, gameVersion)
{
    this.LocalPlayer.Name = "usr" + SupportClass.ThreadSafeRandom.Next() % 99;
 
    this.AutoJoinLobby = false;
    this.UseInterestGroups = true;
    this.JoinRandomGame = true;
 
    this.DispatchInterval = new TimeKeeper(10);
    this.SendInterval = new TimeKeeper(100);
    this.MoveInterval = new TimeKeeper(500);
    this.UpdateOthersInterval = new TimeKeeper(this.MoveInterval.Interval);
}</pre>
<p class="p1"><em><span class="s1">GameLogic类继承了LoadBalancingClient ，它保持一个状态并自动执行主服务器和游戏服务器之间的转换。 让我们仔细看看GameLogic构造函数中使用的参数：</span></em></p>
<ol class="ol1">
<li class="li1"><b></b><span class="s2"><b>string masterAddress</b> ：要连接的（主）服务器的URL。 请参阅Photon云区域<a href="https://doc.photonengine.com/zh-cn/realtime/current/reference/regions" target="_blank" rel="noopener">列表</a> 。</span></li>
<li class="li1"><b></b><span class="s2"><b>string appId</b> ：在我们的云系统中标识您的应用程序。 如果您还没有AppId，您可以在<a href="https://www.photonengine.com/zh-cn/dashboard/realtime" target="_blank" rel="noopener">Photon Cloud信息中心</a> 创建。 您需要插入有效的AppId才能使大多数演示工作。</span></li>
<li class="li1"><b></b><span class="s2"><b>string gameVersion</b> ：一个字符串，你可以选择曲隔你的游戏的不同版本。 只有具有相同版本号的客户端可以匹配，并且可以相互通信。 这使得添加功能更容易，不会破坏旧客户端。</span></li>
</ol>
<p>&nbsp;</p>
<figure id="attachment_272" aria-describedby="caption-attachment-272" style="width: 600px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-272" src="http://vibrantlink.com/wp-content/uploads/2017/03/Unity3D_Loadingscreen.png" alt="" width="600" height="375" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/Unity3D_Loadingscreen.png 600w, https://vibrantlink.com/wp-content/uploads/2017/03/Unity3D_Loadingscreen-300x188.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /><figcaption id="caption-attachment-272" class="wp-caption-text">粒子演示截图（Unity3D SDK）</figcaption></figure>
<p class="p1"><span class="s1">连接后，Photon云已准备好遵照你的吩咐。 你不必去做所有细微的调整，因为一切都已经为你处理好了！ 在下面的图表中，您可以看到，灰色方块中的所有内容都是由Photon Cloud组织的。 客户端只需要发送简单的操作，如箭头旁边的那些。</span></p>
<figure id="attachment_273" aria-describedby="caption-attachment-273" style="width: 478px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-273" src="http://vibrantlink.com/wp-content/uploads/2017/03/JoinMSCloud.png" alt="" width="478" height="309" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/JoinMSCloud.png 478w, https://vibrantlink.com/wp-content/uploads/2017/03/JoinMSCloud-300x194.png 300w" sizes="auto, (max-width: 478px) 100vw, 478px" /><figcaption id="caption-attachment-273" class="wp-caption-text">光子云简单的工作流</figcaption></figure>
<p class="p1"><span class="s1">现在我们连接到主服务器，我们可以列出，创建和加入房间。</span><span class="s2"> 在这一点上，玩家<span style="color: #ff0000;">不能相互通信或交互</span>。 这是<span style="color: #ff0000;">房间的概念发挥作用</span>。 仔细想一想，看看你需要做什么来连接玩家彼此。</span></p>
<h3 class="p1"><span class="s1">大厅，创建房间和加入房间</span></h3>
<p class="p2"><span class="s1">默认情况下，当你连接时，LoadBalancing API会让你进入游戏的“Lobby”。 在大厅中，主服务器向客户端提供房间列表。 为了保持例如移动环境中的低流量，客户端不能在大厅中互相交互。</span></p>
<p class="p2"><span class="s1">一个房间可以被认为是一个单独的区域，玩家互动（玩他们的游戏）。 当他们在同一个房间，玩家可以发送和接收来自其他人的事件，更改/更新房间的属性等。</span></p>
<p class="p2"><span class="s1">在下面的示例中，我们使用<span style="text-decoration: underline;"><b>“OpCreateRoom”</b>操作</span>来创建和打开房间。 一起创建一个：</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">RoomOptions options = new RoomOptions();
options.options.maxPlayers = 4;
peer.OpCreateRoom("Room 42", options, TypedLobby.Default);</pre>
<p class="p1"><span class="s1">最需要留意的参数和RoomOptions是：</span></p>
<ul class="ul1">
<li class="li1"><b></b><span class="s1"><b>string roomName</b>房间的名称，用于标识和加入房间。</span></li>
<li class="li1"><b></b><span class="s1"><b>bool.RoomOptionsisVisible</b>此变量确定房间是否在可在大厅可见的房间列表中（即连接到主服务器但还没注册但还没有进入房间中的玩家可见）。 重要的是，这些房间仍然可以加入，只要客户端知道房间的确切名称。</span></li>
<li class="li1"><b></b><span class="s1"><b>bool RoomOptions.isOpen</b>确定客户端是否可以加入房间。 当此变量改变时，已经在房间中的客户端不受影响。 然而，他们不能在离开后重新加入房间，只要<b>isOpen</b>是<strong>False</strong>的。</span></li>
<li class="li1"><b></b><span class="s1"><b>byte RoomOptions.maxPlayers</b>决定此房间中的最大玩家数。 如果设置为0，则上限是无限的。 请注意，如果你计划<b>在一个房间里</b>放入大量的用户，你应该看看我们的Photon服务器MMO应用程序！</span></li>
<li class="li1"><b></b><span class="s1"><b>Hashtable RoomOptions.customRoomProperties</b>是一组可选的键和值，您可以定义它们来描述房间。 一个可选的示例是：key“level”，值为“de_dust”。（^_^）。 属性将同步到房间中的所有客户端，并在配对中发挥作用。 更多关于这个选项，见下面。</span></li>
<li class="li1"><b></b><span class="s1"><b>string [] RoomOptions.customRoomPropertiesForLobby</b>将在Lobby中显示的属性。</span></li>
</ul>
<p class="p1"><span class="s1">使用Photon，您可以在运行时更改房间或玩家的属性，因此通过<b>customGameProperties</b>设置<b>属性，</b>在设计服务器逻辑时你将不会有任何限制 。 在房间中使用<b>room.SetCustomProperties（props）</b>设置新值或覆盖现有值。 所做的更改将被合并，因此您只需要传入您想要更改的属性即可。</span></p>
<p class="p1"><span class="s1">一个房间可以有许多属性，但通常只有几个是玩家配对所需要的，所以Photon会希望你在大厅里面定义一个房间的属性关键列表。 即使在<strong>RoomOptions.customRoomProperties</strong>中尚未定义的键也可以在<b>string [] customRoomPropertiesForLobby中</b>使用，并在稍后填充。</span></p>
<figure id="attachment_275" aria-describedby="caption-attachment-275" style="width: 143px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-275" src="http://vibrantlink.com/wp-content/uploads/2017/03/PropertiesCloud1.png" alt="" width="143" height="87" /><figcaption id="caption-attachment-275" class="wp-caption-text">LoadBalancing房间属性示例</figcaption></figure>
<p class="p1"><span class="s1">就像是房间的属性一样，您可以为每个玩家设置自定义属性。</span><span class="s2"> 每个客户端可以设置玩家属性</span><strong><span class="s3">LoadBalancingClient.localPlayer.SetCustomProperties()</span></strong><span class="s2"> ，即使在加入房间之前。 他们一直保留客户端，并与客户端加入或创建的任何房间时保持同步。</span></p>
<figure id="attachment_276" aria-describedby="caption-attachment-276" style="width: 139px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-276" src="http://vibrantlink.com/wp-content/uploads/2017/03/PropertiesCloud.png" alt="" width="139" height="87" /><figcaption id="caption-attachment-276" class="wp-caption-text">LoadBalancing玩家属性示例</figcaption></figure>
<p class="p1"><span class="s1">现在我们成功创建了一个房间，是让其他客户加入的时候了！ 加入房间是非常快速和容易的，不需要任何进一步的解释，看看下面的操作：</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">// From LoadBalancingClient.cs                        
public void OnOperationResponse(OperationResponse operationResponse)
{
    ...
    this.OpJoinRoom(name);
}</pre>
<p>&nbsp;</p>
<p><span class="s1">接下来让我们看看玩家现在可以如何互动。</span></p>
<h3 class="p1"><span class="s1">发送事件</span></h3>
<p class="p2"><span class="s1">对于客户端彼此交互，我们使用一个简单的事件系统。 使用事件是向给指定房间内的玩家发送和接收快速可靠信息的主要方式。 所有你游戏逻辑中的重要活动都可以通过这种方式进行传递。您的游戏逻辑的所有必要的数据可以在客户端之间发送。 您甚至可以通过使用简单的参数指定协议（UDP与TCP或可靠的(UDPreliable UDP)与不可靠的UDP(unreliable UDP)）来自定义交换信息的方式，具体取决于您的需要。</span></p>
<figure id="attachment_277" aria-describedby="caption-attachment-277" style="width: 433px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-277" src="http://vibrantlink.com/wp-content/uploads/2017/03/SendEventCloud.png" alt="" width="433" height="151" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/SendEventCloud.png 433w, https://vibrantlink.com/wp-content/uploads/2017/03/SendEventCloud-300x105.png 300w" sizes="auto, (max-width: 433px) 100vw, 433px" /><figcaption id="caption-attachment-277" class="wp-caption-text">LoadBalancing RaiseEvent操作图</figcaption></figure>
<p class="p1"><span class="s1">活动将在房间的参与者之间分发。 您可以决定是否要将活动发送到<span style="text-decoration: underline;">特定的玩家</span>，<span style="text-decoration: underline;">团体</span>或<span style="text-decoration: underline;">个人的列表</span>。</span></p>
<p class="p1"><span class="s1">让我们来看看我们在粒子演示中使用的事件，例如在更改颜色时：</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="twilight">public void ChangeLocalPlayercolor()
{
    if (this.LocalPlayer != null)
    {
        this.LocalPlayer.RandomizeColor();
        this.loadBalancingPeer.OpRaiseEvent(DemoConstants.EvColor, this.LocalPlayer.WriteEvColor(), this.SendReliable, new RaiseEventOptions() { CachingOption = EventCaching.AddToRoomCache });
    }
}</pre>
<p><span class="s1">OpRaiseEvent</span><span class="s2">参数包括：</span></p>
<ul class="ul1">
<li class="li2"><b></b><span class="s3"><b>byte eventCode</b>事件代码指定要提出的实际事件。 有从由255开始向下计算的Photon的预定义事件。而从1开始到199，你可以定义在游戏逻辑中使用自己的事件。</span></li>
<li class="li2"><b></b><span class="s3"><b>Hashtable evData</b>您可以填写此哈希表来传输您需要的所有数据。 这是您将用于在客户端之间交换信息的中央数据结构。 但是，您游戏逻辑的标准的循环和标准化步骤应该作为事件发送（例如回合结束）。</span></li>
<li class="li2"><b></b><span class="s3"><b>bool sendReliable</b>当将此标志设置为“true”时，将从UDP切换到可靠的UDP(reliable UDP)。 这意味着在传输期间丢失的任何包将被重新发送，并且客户端将确保包将按照它们被发送的顺序被解释。 这可能会以负面的方式影响性能，因为这些额外的步骤将增加额外的消息量并增加整体通讯的数据负担。</span></li>
<li class="li2"><b></b><span class="s3"><b>byte RaiseEventOptions.channelId</b>您可以使用不同的通道对发送的事件进行分组和优先级排序。 我们将在一个小例子中说明此功能：假设您使用渠道1发送有关玩家位置的相关信息。 你在你的游戏中启用了可靠的UDP，因为你需要在你的游戏类型获得额外的可靠性。在某些时候，通道1会由于许多消息而拥挤，因为一些玩家有延迟，因为网络连接不好而产生了一定数量的通讯包丢失，因此必须重新发送许多消息。 而这时需要入列发送另一个重要事件（如本轮结束），可能需要一些时间才能确认，因为客户端仍然忙于接收来自通道1的所有位置更新。因此，如果您现在分派一个事件到channelId 0，它将优先于所有其他排队的消息处理。 通过合理的使用此功能，您可以获得设计预期的反应性，并确保游戏逻辑的正确执行，即使在一个平庸的的连接条件下。</span></li>
<li class="li2"><b></b><span class="s3"><b>int [] RaiseEventOptions.targetActors</b>要发送事件的房间中的<b>ActorNumbers的</b>列表。</span></li>
<li class="li2"><b></b><span class="s3"><b>EventCaching RaiseEventOptions.CachingOption</b>影响服务器如何处理事件缓存。 可以缓存玩家稍后加入的事件或删除以前缓存的事件。</span></li>
</ul>
<figure id="attachment_278" aria-describedby="caption-attachment-278" style="width: 600px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-278" src="http://vibrantlink.com/wp-content/uploads/2017/03/ParticleDemo_Game.png" alt="" width="600" height="375" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/ParticleDemo_Game.png 600w, https://vibrantlink.com/wp-content/uploads/2017/03/ParticleDemo_Game-300x188.png 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /><figcaption id="caption-attachment-278" class="wp-caption-text">粒子演示（Unity3d SDK）：房间视图截图</figcaption></figure>
<p class="p1"><span class="s1">最后但并非最终的方法，Photon还有额外的重载(Overload)，你可以用来指定接收器组。</span></p>
<h3 class="p1">想进一步了解PhotonCloud光子云？</h3>
<p class="p1">我们推荐您学习Exit Games的官方实例教学马可波罗，您可以在<a href="http://vibrantlink.com/rescource-practices/" target="_blank" rel="noopener">光子实践资源</a>找到被翻译为中文的教程实践连接。</p>
<p class="p1">请留意，如果您有自己的服务器（VPS，阿里云等)，那么PhotonServer光子服务器同样可以担负PhotonCloud光子云的服务器连接功能，请参照<a href="http://vibrantlink.com/5minsphotonserver/" target="_blank" rel="noopener">这篇文章</a>和光子服务器的<a href="http://vibrantlink.com/photonserver/" target="_blank" rel="noopener">详细介绍</a>。</p>The post <a href="https://vibrantlink.com/5minsphotoncloud/">5分钟部署PhotonCloud</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">264</post-id>	</item>
		<item>
		<title>5分钟启动PhotonServer</title>
		<link>https://vibrantlink.com/5minsphotonserver/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Thu, 16 Mar 2017 10:19:00 +0000</pubDate>
				<category><![CDATA[5min]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[PhotonServer]]></category>
		<guid isPermaLink="false">http://vibrantlink.com/?p=254</guid>

					<description><![CDATA[<p>Photon非常容易安装和启动。 SDK包含可立即使用的二进制文件，可在5分钟内启动和运行。 下载并提取 Ph [&#8230;]</p>
The post <a href="https://vibrantlink.com/5minsphotonserver/">5分钟启动PhotonServer</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></description>
										<content:encoded><![CDATA[<p><span class="notranslate">Photon非常容易安装和启动。</span> <span class="notranslate">SDK包含可立即使用的二进制文件，可在5分钟内启动和运行。</span></p>
<h3><span class="notranslate">下载并提取</span></h3>
<hr />
<p><span class="notranslate">Photon服务器SDK可在光子网站的<a href="https://www.photonengine.com/zh-cn/onpremise/Download" target="_blank" rel="noopener">下载页面</a>上获得。</span></p>
<div class="alert alert-warning"><span style="color: #ff6600;"><span class="notranslate">重要信息：您应解压缩下载的zip文件，然后解压缩。</span> <span class="notranslate">有关如何执行此操作的详细信息，请访问<a style="color: #ff6600;" href="https://blogs.msdn.microsoft.com/delay/p/unblockingdownloadedfile/" target="_blank" rel="noopener">此链接</a> 。</span></span></div>
<p><span class="notranslate">服务器SDK自带的可执行文件。</span> <span class="notranslate">这保持包括.dll文件被标记为“<span style="text-decoration: underline;">untrustworthy</span>”一些解压缩工具（从互联网=&gt;下载）。</span></p>
<p><span class="notranslate">您可以将服务器包解压缩到任何位置 &#8211; 最好是您事先准备好的空文件夹。</span> <span class="notranslate">提取创建几个文件夹。</span></p>
<p><span class="notranslate">“deploy”文件夹包含二进制文件。</span> <span class="notranslate">这是你需要至少运行Photon。</span> <span class="notranslate">文件夹<span style="text-decoration: underline;"><strong><code>doc</code></strong></span> ， <span style="text-decoration: underline;"><strong><code>lib</code></strong></span>和<span style="text-decoration: underline;"><strong><code>src-server</code></strong></span> （应用程序）用于开发。</span></p>
<h3 class="p1"><span class="s1">启动Photon</span></h3>
<hr />
<p class="p2"><span class="s1">在“deploy”文件夹中，每个应用程序都会找到一个文件夹（ <a href="https://doc.photonengine.com/zh-cn/onpremise/current/getting-started/basic-concepts" target="_blank" rel="noopener"><span class="s2">请参阅：基本概念</span></a> ）和一些以“bin”开头的文件夹。 打开以下两个：</span></p>
<ul class="ul1">
<li class="li2"><b></b><span class="s1"><b>bin_Win32</b> ：Windows Vista及以上</span></li>
<li class="li2"><b></b><span class="s1"><b>bin_Win64</b> ：64位Windows Vista及以上</span></li>
</ul>
<p class="p2"><span class="s1">在任一文件夹中，您将找到实际的Photon可执行文件。 你可以用命令行参数启动它，或者你可以使用</span><span class="s3">PhotonControl</span><span class="s1"> 。</span></p>
<p class="p2"><span class="s1">启动<span style="text-decoration: underline;"><span class="s2">PhotonControl.exe</span></span>并确认此应用程序的管理员权限。 它们是设置Photon as a Service的选项所需的。</span></p>
<p class="p2"><span class="s1">注意托盘栏图标（默认右下角）。 单击白色/灰色图标打开控制Photon的菜单。 从光子实例（下面解释）和“作为应用程序启动”中选择</span><span class="s3">LoadBalancing (MyCloud)</span><span class="s1"> 。 <strong><span style="color: #ff6600;">现在你已经启动了Photon！</span></strong></span></p>
<figure id="attachment_256" aria-describedby="caption-attachment-256" style="width: 569px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-256" src="http://vibrantlink.com/wp-content/uploads/2017/03/PhotonControl-03-v4.png" alt="" width="569" height="284" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/PhotonControl-03-v4.png 569w, https://vibrantlink.com/wp-content/uploads/2017/03/PhotonControl-03-v4-300x150.png 300w" sizes="auto, (max-width: 569px) 100vw, 569px" /><figcaption id="caption-attachment-256" class="wp-caption-text">光子控制：作为应用程序启动“LoadBalancing（MyCloud）</figcaption></figure>
<p class="p1"><span style="color: #ff6600;"><span class="s1">它可能需要几秒钟，直到Photon准备使用，这取决于它运行的应用程序。 </span><span class="s2">退出光子控制不会关闭服务器。</span></span></p>
<p class="p1"><span class="s1">在您应用许可证文件之前，Photon将限制为20个并发连接。 请参阅<a href="https://doc.photonengine.com/zh-cn/onpremise/current/operations/licenses">许可证</a>页面。</span></p>
<h3 class="p1"><span class="s1">光子实例</span></h3>
<hr />
<p class="p2"><span class="s1">Photon被设计为运行“应用程序”作为游戏逻辑。 他们定义了客户端可以做什么或不能做什么（例如，匹配）。 应用程序协同运行的不同任务。</span></p>
<p class="p2"><span class="s1">安装即用，Photon有两种不同的应用配置：</span></p>
<ul class="ul1">
<li class="li2"><b></b><span class="s1"><b>LoadBalancing（MyCloud）</b>是首选的设置，并与Photon Cloud和PUN兼容。</span></li>
<li class="li2"><b></b><span class="s1"><b>MMO Demo</b>是一个暴露基于Photon的简单MMO解决方案的应用程序。</span></li>
</ul>
<p class="p3"><span style="color: #008000;"><em><span class="s1">“LoadBalancing（MyCloud）”需要一些设置。 默认情况下，它仅适用于同一台计算机上的客户端。 见下面如何设置LoadBalancing。</span></em></span></p>
<h3 class="p1"><span class="s1">LoadBalancing（MyCloud）和游戏服务器IP配置</span></h3>
<hr />
<p class="p2"><span class="s1">启动</span><span class="s2" style="color: #ff0000;">LoadBalancing (MyCloud)</span><span class="s1">是客户端通过PUN或“LoadBalancing Api”完成的方式。</span></p>
<p class="p2"><span class="s1">实际上，此设置将启动两个单独的光子应用程序： </span><span class="s2" style="color: #ff0000;">Master Server</span><span class="s1">和</span><span class="s2" style="color: #ff0000;">Game Server</span><span class="s1"> 。 创建新房间时，主服务器将选择游戏服务器并将客户端转发到该服务器。</span></p>
<p class="p3"><span style="color: #008000;"><em><span class="s1">默认情况下，只有同一台计算机上的客户端可以访问游戏服务器。 即使模拟的移动设备也不能创建房间，并且在没有先前的游戏服务器IP配置的情况下将失败。</span></em></span></p>
<p class="p2"><span class="s1">在PhotonControl菜单中选择“游戏服务器IP配置”。 将列出主机的IP地址，标记为“public”或“local”。 选择一个。</span></p>
<p class="p2"><span class="s1">“Autodetect public”条目使服务器在Photon启动时检测到公共互联网 IP。</span></p>
<p class="p2"><span class="s1">使用<span class="s3"><b>本地IP</b></span>意味着只有同一本地网络中的客户端可以连接。 你需要<b>使用公共IP，如果来自互联网的玩家应该能够连接</b>和加入游戏。</span></p>
<p class="p2"><span class="s1">如果您的服务器在LAN中，但您的客户端使用WiFi，则它们可能位于不同的网络中。 如果您的客户端无法访问服务器，请检查您的路由器是否允许WiFi和LAN之间的连接。 检查所有设备是否在相同的IP范围内。</span></p>
<p class="p3"><em><strong><span class="s1" style="color: #008000;">请记住，公共IP可能会更改，除非你有一个静态IP地址。</span></strong></em></p>
<p class="p2"><span class="s1">无论选择本地网络IP还是公共网络IP， <b>您还必须设置防火墙，路由器和交换机。</b> 但是，我们不能在这里告诉您具体如何设置，因为不同的硬件和软件的数量过于庞大。 在最简单的环境设置中，多台测试机都应该只通过一台相同的交换机/路由器连接。</span></p>
<p class="p2"><span class="s1">游戏服务器IP地址保存在名为“Photon.LoadBalancing.dll.config”的文件中。 它也可以手动编辑。</span></p>
<h3 class="p1"><span class="s1">启动测试客户机</span></h3>
<hr />
<p class="p2"><span class="s1">服务器SDK包括一个测试客户端，用于模拟多个客户端并生成一些负载。 您可以从PhotonControl菜单启动它。 它是您启动的应用程序设置的最后一个菜单项：“运行测试客户端”。</span></p>
<p class="p2"><span class="s1">测试客户端是一个简单的控制台应用程序，将模拟客户端会话和游戏，并附带着几个玩家。</span></p>
<figure id="attachment_257" aria-describedby="caption-attachment-257" style="width: 670px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-257" src="http://vibrantlink.com/wp-content/uploads/2017/03/PhotonControl-Photon-TestClient.jpg.png" alt="" width="670" height="337" srcset="https://vibrantlink.com/wp-content/uploads/2017/03/PhotonControl-Photon-TestClient.jpg.png 670w, https://vibrantlink.com/wp-content/uploads/2017/03/PhotonControl-Photon-TestClient.jpg-300x151.png 300w" sizes="auto, (max-width: 670px) 100vw, 670px" /><figcaption id="caption-attachment-257" class="wp-caption-text">Photon服务器屏幕截图：Test Client</figcaption></figure>
<h3 class="p1"><span class="s1">许可信息</span></h3>
<hr />
<p class="p2"><span class="s1">PhotonControl将在开始时从您的.license文件读取一些值。 选择菜单中的“许可证信息”项目，从菜单中检查CCU，到期日期等。 如果替换.license文件，则应重新启动PhotonControl以获取新值。</span></p>
<p class="p2">中国区的Photon Server 许可文件，请联络光子中国代理动联无限的<a href="http://vibrantlink.com/contact/" target="_blank" rel="noopener">官网</a>，并获取中国区的许可验证服务。</p>
<p class="p2"><span class="s1">服务器日志还将包含许可证的基本值。</span></p>
<p class="p2"><span class="s1">请参阅<a href="https://doc.photonengine.com/zh-cn/onpremise/current/operations/licenses" target="_blank" rel="noopener"><span class="s2">许可证</span></a>页面。</span></p>
<p class="p2">The post <a href="https://vibrantlink.com/5minsphotonserver/">5分钟启动PhotonServer</a> first appeared on <a href="https://vibrantlink.com">光子引擎photonengine中文站</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">254</post-id>	</item>
	</channel>
</rss>
