Photon Server游戏服务器教程(一)服务器配置
发表于2018-05-02
Photon Server 是一款实时的Socket服务器和开发框架,开发非常快速,使用非常简单。服务端架构在windows系统平台上,采用C#语言编写。Photon Server客户端SDK提供了多种平台的开发API,包括DotNet、Unity3D、C/C++以及ObjC等。这个Photon Server游戏服务器教程系列主要时帮助大家去理解和使用,下面就来看看Photon Server的配置。
一、PhotonServer的下载与解压:
1.PhotonServe的官方网站https://www.photonengine.com/zh-CN/Photon ,进入到官网后点击SDKs,选择Server 工程,点击SeverSDK ON-PREMISES进行下载,需要注册一个账号。

2.百度云盘,链接::https://pan.baidu.com/s/1nvyyC21 密码:brn6
3.把下载的文件解压到指定的盘符即可(文件路径最好不要含有中文),无需安装,我这里解压在D:\Program Files (x86)文件目录下。

解压后得到5个文件夹 build:编译配置有关的文件。 deploy :主要存放photon的服务器控制程序和服务端Demo。 doc:存放PhotonServer开发的相关API文档。 lib:存放PhotonServer开发的相关动态链接库。 src-server:服务端Demo源代码
根据自己的电脑系统选择deploy文件夹下的bin_Win32或者bin_Win64文件下的PhotonControl.exe,点击运行Photon。

运行后会出现在右下角的托盘里

此时的Licenses 最大连接数量为20,如若想扩展到100,需在官网下载授权文件,放在deploy文件夹下的bin_Win32或者bin_Win64目录里面,下次运行时会自动识别授权文件。
选择 Your Server 选项

点击Download下载100 CCU文件即可。

二、搭建自己的服务器
1.下面我们开始搭建自己的第一个Photon Sever 服务器端程序,在Visual Studio 2013中新建一个MyGamePhotonServer类库工程。
2.在工程中添加一下三个引用,文件在PhotonServer解压目录的lib文件夹中,三个dll分别是:ExitGamesLibs.dll,Photon.SocketServer.dll,PhotonHostRuntimeInterfaces.dll

3.在此工程目录中添加入口类MyGameServer,继承ApplicationBase类,并实现其接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Photon.SocketServer;
namespace MyGamePhotonServer
{
/// <summary>
/// 所有的server端 主类都要继承自ApplicationBase
/// </summary>
public class MyGameServer:ApplicationBase
{
/// <summary>
/// 刚一个客户端请求连接的
/// </summary>
/// <param name="initRequest"></param>
/// <returns></returns>
protected override PeerBase CreatePeer(InitRequest initRequest)
{
return new MyClientPeer(initRequest);
}
/// <summary>
/// 初始化
/// </summary>
protected override void Setup()
{
}
/// <summary>
/// server端关闭的时候
/// </summary>
protected override void TearDown()
{
}
}
}
4.添加与客户端通信的类MyClientPeer, 需要继承ClientPeer类,并实现接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Photon.SocketServer;
namespace MyGamePhotonServer
{
public class MyClientPeer:ClientPeer
{
public MyClientPeer(InitRequest initRequest):base(initRequest)
{ }
/// <summary>
/// 处理客户端断开连接后的操作
/// </summary>
/// <param name="reasonCode"></param>
/// <param name="reasonDetail"></param>
protected override void OnDisconnect(PhotonHostRuntimeInterfaces.DisconnectReason reasonCode, string reasonDetail)
{
}
/// <summary>
/// 处理客户端的请求
/// </summary>
/// <param name="operationRequest"></param>
/// <param name="sendParameters"></param>
protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
{
}
}
}
5.在deploy文件夹下新建一个MyGameServer\bin文件夹,在Visual Studio 2013中把我们刚创建的服务器程序MyPhotonServer部署在PhotonServer 中。

6.配置服务器:打开bin_Win64(如果你是32的就打开bin_Win32)文件夹下的PhotonServer.config,在Application标签下添加自己服务器配置文件。
<Application
Name="MyGame"
BaseDirectory="MyGameServer"
Assembly="MyGamePhotonServer"
Type="MyGamePhotonServer.MyGameServer"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
Name:这个就是程序名称
BaseDirectory就是我们发布后在deploy文件加下的路径:
Assembly:就是我们的类库工程生成的那个dll文件
Type:我们入口类的名称(要带上命名空间)
以下是完整的配置文件
<?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>
<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="4530"
OverrideApplication="Master"
PolicyFile="Policy\assets\socket-policy.xml"
InactivityTimeout="10000"
>
</TCPListener>
<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="9090"
DisableNagle="true"
InactivityTimeout="10000"
OverrideApplication="Master">
</WebSocketListener>
<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="Master">
<Application
Name="Master"
BaseDirectory="LoadBalancing\Master"
Assembly="Photon.LoadBalancing"
Type="Photon.LoadBalancing.MasterServer.MasterApplication"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config"
>
</Application>
<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>
<!-- Instance settings -->
<MyGameInstance
MaxMessageSize="512000"
MaxQueuedDataPerPeer="512000"
PerPeerMaxReliableDataInTransit="51200"
PerPeerTransmitRateLimitKBSec="256"
PerPeerTransmitRatePeriodMilliseconds="200"
MinimumTimeout="5000"
MaximumTimeout="30000"
DisplayName="MyGameDemo"
>
<!-- 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="MyGame">
</UDPListener>
</UDPListeners>
<!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<!-- Port 4530 is Photon's default for TCP connecttions. -->
<!-- A Policy application is defined in case that policy requests are sent to this listener (known bug of some some flash clients) -->
<TCPListeners>
<TCPListener
IPAddress="0.0.0.0"
Port="4530"
PolicyFile="Policy\assets\socket-policy.xml"
InactivityTimeout="10000"
OverrideApplication="MyGame"
>
</TCPListener>
</TCPListeners>
<!-- 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="MyGame">
<!-- MyGame Application -->
<Application
Name="MyGame"
BaseDirectory="MyGameServer"
Assembly="MyGamePhotonServer"
Type="MyGamePhotonServer.MyGameServer"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
</Applications>
</MyGameInstance>
</Configuration>
7.启动服务器程序 MyGameDemo

到此为止我们的第一个Photon Server 服务器就搭建好了。
来自:https://blog.csdn.net/u010812661/article/details/78710548
