准备:申请3台Windows虚拟机。

3台虚拟机上都部署上Photon Server.

一、主虚拟机上部署MasterServer。

  (1)在第一台虚拟机中,部署的Photon Server目目录下找到Loadbalancing目录,删除GameServer文件夹

  (2)修改Master的配置文件。Photon.LoadBalancing.dll.config (在目录Master/bin/中)

  (3)修改PhotonServer.config 配置文件。(在目录 bin_Win64/ 中) 删除跟Game相关的配置

<?xml version="1.0" encoding="Windows-1252"?>
<!--
(c) 2015 by Exit Games GmbH, http://www.exitgames.com
Photon server configuration file.
For details see the photon-config.pdf. This file contains two configurations: "LoadBalancing"
Loadbalanced setup for local development: A Master-server and a game-server.
Starts the apps: Game, Master, CounterPublisher
Listens: udp-port 5055, tcp-port: 4530, 843 and 943 --> <Configuration>
<!-- Multiple instances are supported. Each instance has its own node in the config file. --> <LoadBalancing
MaxMessageSize="512000"
MaxQueuedDataPerPeer="512000"
PerPeerMaxReliableDataInTransit="51200"
PerPeerTransmitRateLimitKBSec="256"
PerPeerTransmitRatePeriodMilliseconds="200"
MinimumTimeout="5000"
MaximumTimeout="30000"
DisplayName="LoadBalancing (MyCloud)"> <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<!-- Port 5055 is Photon's default for UDP connections. -->
<UDPListeners>
<UDPListener
IPAddress="0.0.0.0"
Port="5055"
OverrideApplication="Master">
</UDPListener>
</UDPListeners> <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<TCPListeners>
<!-- TCP listener for Game clients on Master application -->
<TCPListener
IPAddress="0.0.0.0"
Port="4530"
OverrideApplication="Master"
PolicyFile="Policy\assets\socket-policy.xml"
InactivityTimeout="10000"
>
</TCPListener> <!-- DON'T EDIT THIS. TCP listener for GameServers on Master application -->
<TCPListener
IPAddress="0.0.0.0"
Port="4520">
</TCPListener>
</TCPListeners> <!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943) -->
<PolicyFileListeners>
<!-- multiple Listeners allowed for different ports -->
<PolicyFileListener
IPAddress="0.0.0.0"
Port="843"
PolicyFile="Policy\assets\socket-policy.xml">
</PolicyFileListener>
<PolicyFileListener
IPAddress="0.0.0.0"
Port="943"
PolicyFile="Policy\assets\socket-policy-silverlight.xml">
</PolicyFileListener>
</PolicyFileListeners> <!-- WebSocket (and Flash-Fallback) compatible listener -->
<WebSocketListeners>
<WebSocketListener
IPAddress="0.0.0.0"
Port="9090"
DisableNagle="true"
InactivityTimeout="10000"
OverrideApplication="Master">
</WebSocketListener> </WebSocketListeners> <!-- Defines the Photon Runtime Assembly to use. -->
<Runtime
Assembly="PhotonHostRuntime, Culture=neutral"
Type="PhotonHostRuntime.PhotonDomainManager"
UnhandledExceptionPolicy="Ignore">
</Runtime> <!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
<!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
<Applications Default="Master">
<Application
Name="Master"
BaseDirectory="LoadBalancing\Master"
Assembly="Photon.LoadBalancing"
Type="Photon.LoadBalancing.MasterServer.MasterApplication"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config"
>
</Application> <!-- CounterPublisher Application -->
<Application
Name="CounterPublisher"
BaseDirectory="CounterPublisher"
Assembly="CounterPublisher"
Type="Photon.CounterPublisher.Application"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
</Applications>
</LoadBalancing> </Configuration>

 

   (4)启动服务。

二、在另外两台虚拟机上部署GameServer服务

  (1)在目前中删除Master

  (2)修改GameServer/bin/Photon.LoadBalancing.dll.config 配置文件。

先删除MasterServer配置项

修改GameServerSetting项中的  MasterIPAddress 一项。

  总体配置

<?xml version="1.0"?>

<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Photon.LoadBalancing.Common.CommonSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
<section name="Photon.LoadBalancing.GameServer.GameServerSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
<section name="Photon.LoadBalancing.MasterServer.MasterServerSettings"
type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
<section name="Photon.Common.Authentication.Settings"
type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</sectionGroup>
<section name="Photon" type="Photon.SocketServer.Diagnostics.Configuration.PhotonSettings, Photon.SocketServer" />
<section name="PluginSettings" type="Photon.Hive.Configuration.PluginSettings, PhotonHive" />
<section name="WebRpcSettings" type="Photon.Hive.WebRpc.Configuration.WebRpcSettings, PhotonHive" />
<section name="AuthSettings" type="Photon.Common.Authentication.Configuration.Auth.AuthSettings, Photon.Common" />
</configSections>
<applicationSettings> <Photon.LoadBalancing.Common.CommonSettings>
<setting name="NodesFileName" serializeAs="String">
<value>Nodes.txt</value>
</setting>
<setting name="NodesFilePath" serializeAs="String">
<value>..\..\</value>
</setting>
<setting name="EnablePerformanceCounters" serializeAs="String">
<value>True</value>
</setting>
</Photon.LoadBalancing.Common.CommonSettings> <Photon.Common.Authentication.Settings>
<setting name="AuthCacheUpdateInterval" serializeAs="String">
<value>300</value>
</setting> <setting name="AuthTokenKey" serializeAs="String">
<value>76B2814E-2A50-4E29-838A-20411D335FC9</value>
</setting> <setting name="AuthTokenExpiration" serializeAs="String">
<value>10000</value>
</setting> <!-- Custom Authentication Queue Settings -->
<setting name="MaxConcurrentRequests" serializeAs="String">
<value>50</value>
</setting>
<setting name="MaxQueuedRequests" serializeAs="String">
<value>5000</value>
</setting>
<setting name="MaxErrorRequests" serializeAs="String">
<value>10</value>
</setting>
<setting name="MaxTimedOutRequests" serializeAs="String">
<value>10</value>
</setting>
<setting name="HttpRequestTimeoutMS" serializeAs="String">
<value>30000</value>
</setting>
<setting name="ReconnectIntervalS" serializeAs="String">
<value>60</value>
</setting>
<setting name="QueueTimeoutS" serializeAs="String">
<value>20</value>
</setting>
<setting name="MaxBackoffTimeInMiliseconds" serializeAs="String">
<value>10000</value>
</setting>
</Photon.Common.Authentication.Settings> <Photon.LoadBalancing.GameServer.GameServerSettings>
<setting name="AppStatsPublishInterval" serializeAs="String">
<value>1000</value>
</setting>
<!-- GameServer-to-Master connections. -->
<setting name="ConnectReytryInterval" serializeAs="String">
<value>15</value>
</setting>
<setting name="EnableNamedPipe" serializeAs="String">
<value>False</value>
</setting>
<!-- Path for Client-to-Gameserver HTTP connections -->
<setting name="GamingHttpPath" serializeAs="String">
<value>photon/g</value>
</setting>
<!-- Client-to-Gameserver HTTP connections. Needs to match the RHTTPListener in PhotonServer.config -->
<setting name="GamingHttpPort" serializeAs="String">
<value>80</value>
</setting>
<!-- Client-to-Gameserver HTTPS connections. Needs to match the RHTTPListener in PhotonServer.config -->
<setting name="GamingHttpsPort" serializeAs="String">
<value>443</value>
</setting>
<!-- Client-to-Gameserver Secure WebSocket connections. Needs to match the secure WebSocketListener in PhotonServer.config -->
<setting name="GamingSecureWebSocketPort" serializeAs="String">
<value>19091</value>
</setting>
<!-- Client-to-Gameserver TCP connections. Needs to match the TCPListener in PhotonServer.config -->
<setting name="GamingTcpPort" serializeAs="String">
<value>4531</value>
</setting>
<!-- Client-to-Gameserver UDP connections. Needs to match the UDPListener in PhotonServer.config -->
<setting name="GamingUdpPort" serializeAs="String">
<value>5056</value>
</setting>
<!-- Client-to-Gameserver WebSocket connections. Needs to match the WebSocketListener in PhotonServer.config -->
<setting name="GamingWebSocketPort" serializeAs="String">
<value>9091</value>
</setting>
<setting name="HttpQueueMaxErrors" serializeAs="String">
<value>30</value>
</setting>
<setting name="HttpQueueMaxTimeouts" serializeAs="String">
<value>30</value>
</setting>
<setting name="HttpQueueRequestTimeout" serializeAs="String">
<value>30000</value>
</setting>
<setting name="HttpQueueMaxBackoffTime" serializeAs="String">
<value>10000</value>
</setting>
<setting name="HttpQueueMaxQueuedRequests" serializeAs="String">
<value>5000</value>
</setting>
<setting name="HttpQueueQueueTimeout" serializeAs="String">
<value>90000</value>
</setting>
<setting name="HttpQueueReconnectInterval" serializeAs="String">
<value>60000</value>
</setting>
<setting name="HttpQueueMaxConcurrentRequests" serializeAs="String">
<value>1</value>
</setting>
<setting name="LastTouchCheckIntervalSeconds" serializeAs="String">
<value>60</value>
</setting>
<setting name="LastTouchSecondsDisconnect" serializeAs="String">
<value>0</value>
</setting>
<!-- Set to the IP Address of the Photon instance where your Master application is running. -->
<setting name="MasterIPAddress" serializeAs="String">
<value>15.24.15.114</value>
</setting>
<setting name="MaxEmptyRoomTTL" serializeAs="String">
<value>60000</value>
</setting>
<!-- Gameserver-to-Master connections. -->
<setting name="OutgoingMasterServerPeerPort" serializeAs="String">
<value>4520</value>
</setting>
<setting name="PublicIPAddress" serializeAs="String">
<value></value>
</setting>
<setting name="PublicIPAddressIPv6" serializeAs="String">
<value></value>
</setting>
<!-- the hostname for this gameserver. Required for HTTP & websocket connections. Change it to a useful entry, like hostname.mydomain.com, for a production scenario. -->
<setting name="PublicHostName" serializeAs="String">
<!--<value>%COMPUTERNAME%.mydomain.com</value>-->
<value>localhost</value>
</setting> <!-- The domain name for this gameserver. Required for websocket connections and needs to match the certificate for secure websocket / https connections.
For example: mydomain.com -->
<setting name="PublicDomainName" serializeAs="String">
<value />
</setting>
<setting name="RelayPortHttp" serializeAs="String">
<value>0</value>
</setting>
<setting name="RelayPortSecureWebSocket" serializeAs="String">
<value>0</value>
</setting>
<setting name="RelayPortTcp" serializeAs="String">
<value>0</value>
</setting>
<setting name="RelayPortUdp" serializeAs="String">
<value>0</value>
</setting>
<setting name="RelayPortWebSocket" serializeAs="String">
<value>0</value>
</setting>
<setting name="ServerStateFile" serializeAs="String">
<value>ServerState.txt</value>
</setting>
<setting name="WorkloadConfigFile" serializeAs="String">
<value>Workload.config</value>
</setting>
</Photon.LoadBalancing.GameServer.GameServerSettings>
</applicationSettings> <Photon>
<CounterPublisher enabled="True" updateInterval="1">
<Sender
endpoint="udp://255.255.255.255:40001"
protocol="PhotonBinary"
initialDelay="10"
sendInterval="10" />
</CounterPublisher>
</Photon>
<!-- Enable webhooks plugin by setting Enabled to "true" -->
<PluginSettings Enabled="false">
<Plugins>
<Plugin
Name="WebHooksPlugin1.2"
Version=""
AssemblyName="PhotonHive.WebhooksPlugin1.2.dll"
Type="Photon.Hive.Plugin.WebHooks.PluginFactory"
BaseUrl="http://photon-photon-pluginsdk-v1.webscript.io"
IsPersistent="true"
HasErrorInfo="true"
PathClose="GameClose"
PathCreate="GameCreate"
PathEvent="GameEvent"
PathGameProperties="GameProperties"
PathJoin="GameJoin"
PathLeave="GameLeave"
PathLoad="GameCreate" />
</Plugins>
</PluginSettings>
<!-- Enable webRPCs by setting Enabled to "true" -->
<WebRpcSettings Enabled="false">
<BaseUrl Value="http://photon-photon-pluginsdk-v1.webscript.io" />
</WebRpcSettings> <!-- Enable Custom Authentication by setting Enabled to "true" -->
<AuthSettings Enabled="false" ClientAuthenticationAllowAnonymous="true">
<AuthProviders>
<AuthProvider Name="Custom"
AuthenticationType="0"
AuthUrl="http://photon.webscript.io/auth-demo"
secret="customauthsecret" /> <AuthProvider Name="Facebook"
AuthenticationType="2"
AuthUrl=""
secret="Val1"
appid="Val2" />
</AuthProviders>
</AuthSettings> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>

  (3)修改服务器启动配置  /deploy/bin_Win64/PhotonServer.config 。删除跟Master修改配置

<?xml version="1.0" encoding="Windows-1252"?>
<!--
(c) 2015 by Exit Games GmbH, http://www.exitgames.com
Photon server configuration file.
For details see the photon-config.pdf. This file contains two configurations: "LoadBalancing"
Loadbalanced setup for local development: A Master-server and a game-server.
Starts the apps: Game, Master, CounterPublisher
Listens: udp-port 5055, tcp-port: 4530, 843 and 943 --> <Configuration>
<!-- Multiple instances are supported. Each instance has its own node in the config file. --> <LoadBalancing
MaxMessageSize="512000"
MaxQueuedDataPerPeer="512000"
PerPeerMaxReliableDataInTransit="51200"
PerPeerTransmitRateLimitKBSec="256"
PerPeerTransmitRatePeriodMilliseconds="200"
MinimumTimeout="5000"
MaximumTimeout="30000"
DisplayName="GameLoab (MyCloud)"> <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<!-- Port 5055 is Photon's default for UDP connections. -->
<UDPListeners>
<UDPListener
IPAddress="0.0.0.0"
Port="5056"
OverrideApplication="Game">
</UDPListener> </UDPListeners> <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<TCPListeners>
<!-- TCP listener for Game clients on Master application --> <TCPListener
IPAddress="0.0.0.0"
Port="4531"
OverrideApplication="Game"
PolicyFile="Policy\assets\socket-policy.xml"
InactivityTimeout="10000">
</TCPListener> <!-- DON'T EDIT THIS. TCP listener for GameServers on Master application -->
<TCPListener
IPAddress="0.0.0.0"
Port="4520">
</TCPListener>
</TCPListeners> <!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943) -->
<PolicyFileListeners>
<!-- multiple Listeners allowed for different ports -->
<PolicyFileListener
IPAddress="0.0.0.0"
Port="843"
PolicyFile="Policy\assets\socket-policy.xml">
</PolicyFileListener>
<PolicyFileListener
IPAddress="0.0.0.0"
Port="943"
PolicyFile="Policy\assets\socket-policy-silverlight.xml">
</PolicyFileListener>
</PolicyFileListeners> <!-- WebSocket (and Flash-Fallback) compatible listener -->
<WebSocketListeners>
<WebSocketListener
IPAddress="0.0.0.0"
Port="9091"
DisableNagle="true"
InactivityTimeout="10000"
OverrideApplication="Game">
</WebSocketListener> </WebSocketListeners> <!-- Defines the Photon Runtime Assembly to use. -->
<Runtime
Assembly="PhotonHostRuntime, Culture=neutral"
Type="PhotonHostRuntime.PhotonDomainManager"
UnhandledExceptionPolicy="Ignore">
</Runtime> <!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
<!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
<Applications Default="Game"> <Application
Name="Game"
BaseDirectory="LoadBalancing\GameServer"
Assembly="Photon.LoadBalancing"
Type="Photon.LoadBalancing.GameServer.GameApplication"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application> <!-- CounterPublisher Application -->
<Application
Name="CounterPublisher"
BaseDirectory="CounterPublisher"
Assembly="CounterPublisher"
Type="Photon.CounterPublisher.Application"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
</Applications>
</LoadBalancing> </Configuration>

    (4) 启动服务

  三、第3台虚拟机跟第二台虚拟机配置一样

四、测试。在第一天MasterServer虚拟机中直接用服务器自带的测试工具。

测试发现MasterServer服务器已经能够连上另外两个GameServer服务器了。(这里conneting ip 就是另外两台GameServer服务器的Ip地址).

查看文档: https://doc.photonengine.com/en-us/server/current/applications/loadbalancing/application

      https://gitchat.csdn.net/columnTopic/5a39d5a575e5a577886d6c20

Photon Server LoadBalancing搭建的更多相关文章

  1. Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务

    一,如何创建一个Photon Server服务 参见此博客 快速了解和使用Photon Server 二, 让LoadBalancing与自己的服务一起启动 原Photonserver.config文 ...

  2. 看过自会理解, Photon Server 常见概念分析.

    http://stackoverflow.com/questions/10823915/photon-server-newbie-questions/11653419#11653419 Channel ...

  3. Photon Server初识(四) --- 部署自己的服务Photon Server

    准备工作: 1.一台 window 虚拟机(本机是window也行) 2.下载SDK : https://www.photonengine.com/zh-CN/sdks#server 一:SDK介绍 ...

  4. Windows Server 2003搭建邮件服务器

    Windows Server 2003搭建邮件服务器 由于Windows Server 2003默认是没有安装我们搭建邮件服务器所需要的POP3和SMTP服务的,因此需要我们自己来安装.方法如下: 1 ...

  5. Ubuntu server下搭建Maven私服Nexus

    Ubuntu server下搭建Maven私服Nexus Maven私服Nexus的作用,主要是为了节省资源,在内部作为maven开发资源共享服务器来使用. 1.下载 通过root用户进去Ubuntu ...

  6. 使用FileZilla Server轻松搭建个人FTP服务器

    Linux平台下快速搭建FTP服务器 服务器FTP Server环境搭建 针对以上遇到的问题的解决方案如下: 1)如何上传文件到云服务器上          关于这个问题,我首先想到的是使用FileZ ...

  7. Windows Server 2008搭建域控制器《转载51CTO.com》

    Windows Server 2008搭建域控制器 引入 在小型网络中,管理员通常独立管理每一台计算机,如最为常用的用户管理.但当网络规模扩大到一定程度后,如超过 10 台计算机,而每台计算机上有 1 ...

  8. 使用IIS Server Farms搭建应用服务负载均衡

    当公司的业务扩大, 伴随着大量的请求,应用服务器的承受能力已经不能满足不断增长的业务需求,使用IIS Server Farms搭建应负载均衡的方式,把请求分发给不同的应用服务器进行处理,这个时候就降低 ...

  9. 【阿里云】在 Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务

     Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务 一.安装 Filezilla Server 下载最新版本的 Filezilla Server ...

随机推荐

  1. tarjan求强连通分量(模板)

    https://www.luogu.org/problem/P2341 #include<cstdio> #include<cstring> #include<algor ...

  2. 1632:【 例 2】[NOIP2012]同余方程

    #include<bits/stdc++.h> #define ll long long using namespace std; void Exgcd(ll a,ll b,ll & ...

  3. shell 统计行数,单词个数,字符个数

    如果我们想知道1.txt中有多少行,多少个单词,多少个字符.我们可以使用wc命令.选项与参数-l:今列出行-w:今列出多少字(英文单词)-m:多少字符[zhang@localhost ~]$ cat ...

  4. 解决oracle服务占用内存过高的问题

    其实这是因为安装Oracle时,为了均衡电脑性能和数据库性能,默认内存大小为物理内存的1/8,自身内存比较大时,oracle所占的内存也会变大.而通常,我们自己的环境并不需要分配那么大的内存来支持Or ...

  5. html文字两行后,就用省略号代替剩下的

    html文字两行后,就用省略号代替剩下的 一.总结 一句话总结: 实现原理很简单,将box的高度设置为行高的两倍,超出之后隐藏,这样就只有两行了,然后再用after属性绝对定位在第二行后面加几个点 . ...

  6. python将py文件转换为pyc

    python -m py_compile lib/ylpy.py python -m py_compile lib/ylpy.py python 一个.py文件如何调用另一个.py文件中的类和函数 A ...

  7. 模糊C均值聚类-FCM算法

    FCM(fuzzy c-means) 模糊c均值聚类融合了模糊理论的精髓.相较于k-means的硬聚类,模糊c提供了更加灵活的聚类结果.因为大部分情况下,数据集中的对象不能划分成为明显分离的簇,指派一 ...

  8. php中如何传递Session ID

    一般通过在各个页面之间传递的唯一的 Session ID,并通过 Session ID 提取这个用户在服务器中保存的 Session 变量,来跟踪一个用户.常见的 Session ID 传送方法主要有 ...

  9. matllab 按照文件夹处理文件

    folders=dir('文件夹地址'); folders={folders.name}; folders=setdiff(folders,{'.','..'})'; num=length(folde ...

  10. []how to use caffe model with TensorRT c++

    //IHostMemory *gieModelStream {nullptr}; //const char* prototxt = "./googlenet/test_20181010.pr ...