Notas de estudo avançado do Unity: teste photonServer

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
insira a descrição da imagem aqui

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.
insira a descrição da imagem aqui
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
insira a descrição da imagem aqui

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
insira a descrição da imagem aqui
gerado
insira a descrição da imagem aqui

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

Acho que você gosta

Origin blog.csdn.net/Raine_Yang/article/details/130766929
Recomendado
Clasificación