photonServer é uma estrutura de rede lançada pela photon, que encapsula os mecanismos de comunicação UDP e TCP para que os usuários possam chamar APIs diretamente para realizar a comunicação do jogo online
1 download e instalação do photonServer
Vá para a opção SDK no site oficial do Photon e escolha fazer o download do Server. A versão atual do servidor foi atualizada para v5. Aqui baixei a versão antiga v4 para ficar consistente com o tutorial. Após o download, siga as instruções de instalação para instalá-lo.
A versão gratuita do PhotonServer suporta inicialmente apenas 20 pessoas online. Depois de criar uma conta photon, você pode obter a chave para expandir o servidor para 100 pessoas gratuitamente. Se você deseja mais capacidade, precisa usar a versão paga
2 Instalação do Visual Studio
Eu tenho usado o VS Code antes e há algumas diferenças em relação ao Visual Studio. Aqui baixamos a versão do Visual Studio Community.
Ao baixar, se o download do site oficial for muito lento, você pode alterar o link de download para uma fonte nacional (existem muitos tutoriais online)
Ao instalar o Visual Studio, já que estamos desenvolvendo jogos Unity, adicione desenvolvimento de desktop .NET e desenvolvimento de jogos Unity às opções de instalação.
2 espaço de trabalho photonserver
Todos os programas de servidor executáveis estão localizados na pasta Photon-OnPremise-Server-SDK_v4-0-29-11263\deploy. Se quisermos criar um novo programa de servidor, crie uma nova pasta nesta pasta e crie uma pasta bin sob a nova pasta. Todos os arquivos dll do servidor devem ser colocados em bin
Aqui criamos uma nova pasta PSTest e criamos uma nova pasta bin abaixo
Antes de escrever o programa do servidor, precisamos importar a estrutura do photonserver. No Solution Explorer, clicamos com o botão direito do mouse na dependência para adicionar uma referência de projeto e selecionamos os seguintes arquivos dll na pasta Photon-OnPremise-Server-SDK_v4-0-29-11263\lib
Entramos no Visual Studio e criamos uma nova biblioteca de classes de tipo de projeto. Criar classe PSTest
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Photon.SocketServer;
namespace PSTest
{
public class PSTest : ApplicationBase
{
// when client connects
protected override PeerBase CreatePeer(InitRequest initRequest)
{
PSPeer peer = new PSPeer(initRequest);
return peer;
}
protected override void Setup()
{
}
protected override void TearDown()
{
}
}
}
PSTest é a classe de entrada do servidor, que é usada para iniciar o servidor e herda de ApplicationBase. Essa classe deve implementar os métodos CreatePeer, Setup e TearDown, que são chamados automaticamente quando o cliente se conecta ao servidor, o servidor é iniciado e o servidor é desligado. Dentre eles, o método CreatePeer retorna um objeto PeerBase, que criaremos separadamente posteriormente.
O Peer no photonServer é o encapsulamento do soquete.
Classe PSPeer
using Photon.SocketServer;
using PhotonHostRuntimeInterfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PSTest
{
public class PSPeer : ClientPeer
{
public PSPeer(InitRequest initRequest) : base(initRequest)
{
}
protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
{
}
protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
{
}
}
}
PSPeer herda da classe ClientPeer e precisa implementar o construtor, OnDisconnect, OnOperationRequest. Estamos aqui apenas para teste, não escreva nada na classe do método.
Depois que o programa é escrito, clicamos com o botão direito do mouse no projeto -> propriedades para inserir a opção de saída, definimos o caminho base da saída para Photon-OnPremise-Server-SDK_v4-0-29-11263\deploy\PSTest\bin e em seguida, gere o arquivo bin após o projeto ser
gerado
3 Modifique o arquivo de configuração
Após gerar o projeto, o PSTest ainda não pode ser iniciado normalmente no photonServer, também precisamos modificar o arquivo de configuração. Vá para a pasta Photon-OnPremise-Server-SDK_v4-0-29-11263\deploy\bin_Win64 e abra o arquivo PhotonServer.config
Aqui copiamos diretamente o nó de exemplo MMoDemo e modificamos o arquivo com base nele
<PSTest
MaxMessageSize="512000"
MaxQueuedDataPerPeer="512000"
PerPeerMaxReliableDataInTransit="51200"
PerPeerTransmitRateLimitKBSec="256"
PerPeerTransmitRatePeriodMilliseconds="200"
MinimumTimeout="5000"
MaximumTimeout="30000"
DisplayName="PSTest"
>
<!-- 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="PSTest">
</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="PSTest"
>
</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="PSTest">
<!-- MMO Demo Application -->
<Application
Name="PSTest"
BaseDirectory="PSTest"
Assembly="PSTest"
Type="PSTest.PSTest"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
</Applications>
</PSTest>
O método de modificação é o seguinte:
1 Renomeie todos os lugares chamados MMoDemo para PSTest. Observe que o atributo Type sob o nó Application é namespace + file name, então insira PSTest.PSTest (aqui o nome do namespace também é PSTest)
2
<!-- 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"
InactivityTimeout="10000">
</PolicyFileListener>
<PolicyFileListener
IPAddress="0.0.0.0"
Port="943"
PolicyFile="Policy\assets\socket-policy-silverlight.xml"
InactivityTimeout="10000">
</PolicyFileListener>
</PolicyFileListeners>
<!-- WebSocket (and Flash-Fallback) compatible listener -->
<WebSocketListeners>
<WebSocketListener
IPAddress="0.0.0.0"
Port="9090"
DisableNagle="true"
InactivityTimeout="10000"
OverrideApplication="MMoDemo">
</WebSocketListener>
</WebSocketListeners>
Este parágrafo está temporariamente sem uso, você pode excluí-lo diretamente
Por fim, inicie o servidor photonserver para executar o PSTest. Se o servidor desligar automaticamente logo após a inicialização, pode haver um problema com o programa, que pode ser verificado de acordo com as informações do log. Aqui, desliguei alguns segundos depois de iniciar e finalmente descobri que o arquivo de configuração tinha um erro de digitação