Tipos de pipeline
O tipo de pipeline está diretamente relacionado ao tipo de eventos que um pipeline emite. Há dois tipos diferentes de pipeline que um desenvolvedor pode instanciar:- Telemetry Event Pipeline: só pode emitir eventos de telemetria e usa a API REST Write Telemetry Events.
- PlayStream Event Pipeline: só pode emitir eventos do PlayStream e usa a API REST Write Events.
Tipos de autenticação
Outra parte importante da criação do pipeline é o tipo de autenticação. Há dois mecanismos de autenticação com suporte para os eventos do PlayFab—a autenticação de entidade e a autenticação por chave de telemetria. A autenticação de entidade é usada quando o desenvolvedor de jogos quer vincular seus eventos a uma entidade específica para agregação ou análise posterior. Por exemplo, o desenvolvedor de jogos pode registrar eventos relacionados às ações do jogador para fazer análises de comportamento posteriores dos jogadores do título que permitam a segmentação. A autenticação por chave de telemetria é usada quando o desenvolvedor de jogos quer registrar eventos que não precisam necessariamente estar vinculados a uma entidade. Por exemplo, antes de haver um jogador conectado, o título pode começar a enviar eventos relacionados ao desempenho ou a métricas específicas que deseja coletar para análise posterior. Isso pode ser feito sem a necessidade de passar pelo processo normal de autenticação de entidade. Combinações de tipo de autenticação/tipo de evento com suporteAutenticação de entidade
Este tipo de autenticação é o método de autenticação normal e mais comum do PlayFab. Ele está estreitamente relacionado a uma entidade específica e exige que você chame as APIs de login correspondentes do PlayFab para obter um token de entidade a ser usado em todas as chamadas subsequentes. A lista a seguir representa os diferentes tipos de entidade que podem ser usados com a autenticação de entidade.- namespace: a entidade namespace representa a identidade do jogador entre títulos e o escopo de dados compartilhados. A Publisher ID identifica o namespace.
- title: a entidade title representa as informações globais com escopo nesse título.
- master_player_account:
master_player_accounté uma entidade de jogador compartilhada por todos os títulos de um namespace. - title_player_account: para a maioria dos desenvolvedores, title_player_account representa o jogador da forma mais tradicional.
- character: a entidade character é uma subentidade de title_player_account.
- group: a entidade group é um contêiner para outras entidades. No momento, ela é limitada a jogadores e personagens.
Autenticação por chave de telemetria
A autenticação por chave de telemetria não exige um token de entidade; portanto, ela não está vinculada a nenhuma entidade específica. Se a autenticação por chave de telemetria for usada, um struct PFEventPipelineTelemetryKeyConfig será necessário durante a criação do pipeline. Há duas partes principais nesse struct:- Uma chave de telemetria, que consiste em uma cadeia de caracteres criada e gerenciada pelo PlayFab Game Manager.
- Um PFServiceConfigHandle, que informa ao SDK qual é a configuração de serviço correta a ser usada para carregar os eventos. O identificador de configuração de serviço é criado durante a inicialização do SDK chamando PFServiceConfigCreateHandle.
Configuração do Event Pipeline
Como mencionado anteriormente, o pipeline de eventos tem algumas propriedades configuráveis que podem ser fornecidas após a criação do pipeline por meio do parâmetro de struct PFEventPipelineConfig. As propriedades configuráveis são:- maxEventsPerBatch: o número máximo de eventos agrupados em lote antes de gravá-los no PlayFab.
- maxWaitTimeInSeconds: o tempo máximo que o pipeline aguarda antes de enviar um lote incompleto.
- pollDelayInMs: quanto tempo o pipeline aguardará para ler novamente o buffer de eventos depois de esvaziá-lo.
- compressionLevel: define o nível de compactação usado no algoritmo de compactação. Para obter mais detalhes sobre a compactação, consulte Compactação GZIP.
- retryOnDisconnect: o pipeline de eventos tentará enviar novamente os eventos que falharam devido à perda de conexão. Disponível apenas para o Telemetry Event Pipeline.
- bufferSize: o limite da quantidade de eventos no buffer do pipeline.
Valores padrão
Caso PFEventPipelineConfig tenha apenas algumas propriedades especificadas, as que estiverem vazias serão substituídas e usarão os valores padrão.
Para ver um exemplo de como qualquer uma dessas propriedades pode ser atualizada no pipeline de eventos, consulte Atualizar a configuração do pipeline.
Compactação GZIP
O Event Pipeline oferece a opção de compactar os payloads do corpo usando o padrão de compactação GZIP. O nível de compactação desejado pode ser especificado dentro do struct PFEventPipelineConfig, que faz parte dos parâmetros da API PFEventPipelineUpdateConfiguration. Um nível de compactação mais baixo obtém menos compactação, mas tem a maior velocidade, e um nível de compactação mais alto obtém taxas de compactação melhores, mas tem a menor velocidade de compactação. A diferença nas taxas de compactação depende inteiramente do tipo de dados enviados. Dependendo do tamanho e da aleatoriedade dos dados, as taxas de compactação podem ser as mesmas mesmo em níveis diferentes. Compensações: Usar a compactação aumenta o tempo de CPU devido à complexidade adicional de executar um algoritmo de compactação, mas, por outro lado, o payload do corpo na rede diminui drasticamente. Portanto, dependendo das necessidades e dos recursos do jogo, cabe ao desenvolvedor de jogos decidir se a compactação deve ser usada. Com base em validação interna, há um aumento médio de 20% no tempo de CPU e uma redução média de 91% no tamanho do payload do corpo. Essas porcentagens podem variar muito dependendo do tamanho do payload e da complexidade dos dados compactados.Manipuladores de eventos
Como parte da criação do pipeline, os desenvolvedores de jogos podem fornecer dois manipuladores de eventos opcionais, que são invocados quando os eventos são carregados. No entanto, se o desenvolvedor de jogos quiser uma experiência do tipo “disparar e esquecer”, poderá omitir os manipuladores de eventos. Os manipuladores de eventos que podem ser fornecidos são os seguintes:- PFEventPipelineBatchUploadSucceededEventHandler: como o nome sugere, recebe todos os eventos carregados com êxito no PlayFab.
- PFEventPipelineBatchUploadFailedEventHandler: receberá todos os eventos com falha depois de passarem pela lógica de nova tentativa do pipeline.
Exemplos de criação de pipeline
A seguir, você encontra diferentes exemplos de como instanciar um pipeline de eventos com base nos tópicos discutidos anteriormente.-
Criação de um Telemetry Event Pipeline com autenticação de entidade
Se o desenvolvedor quiser enviar eventos de telemetria e não precisar usar a autenticação por chave de telemetria, a API PFEventPipelineCreateTelemetryPipelineHandleWithEntity serve para essa finalidade, como mostra o próximo exemplo:
Este exemplo mostra como criar um Telemetry Event Pipeline que usa a autenticação de entidade e não tem manipuladores. Isso significa que o pipeline dispara os eventos e esquece o resultado.
-
Criação de um Telemetry Event Pipeline com autenticação por chave de telemetria
Se o desenvolvedor quiser enviar eventos de telemetria e precisar usar a autenticação por chave de telemetria, a API PFEventPipelineCreateTelemetryPipelineHandleWithKey serve para essa finalidade, como mostra o próximo exemplo:
Este exemplo mostra como criar um pipeline de eventos de telemetria que não usa a autenticação de entidade. O pipeline de eventos começa a carregar eventos usando a chave de telemetria, com a possibilidade de adicionar uma entidade posteriormente. Consulte Mudando para a autenticação de entidade ou atualizando a entidade
-
Criação de um PlayStream Event Pipeline
Se o desenvolvedor quiser enviar eventos do PlayStream, a API PFEventPipelineCreatePlayStreamPipelineHandle serve para essa finalidade, como mostra o próximo exemplo:
Este exemplo mostra como é criado um PlayStream Event Pipeline que usa a autenticação de entidade e não tem manipuladores. Isso significa que o pipeline dispara os eventos e esquece o resultado.
-
Event Pipeline usando manipuladores de eventos
Este exemplo mostra como os manipuladores de eventos seriam fornecidos às APIs de criação do pipeline.
Emitindo eventos
Emitir eventos é uma operação simples depois que o pipeline de eventos já foi criado. O desenvolvedor de jogos deve chamar a API PFEventPipelineEmitEvent, que recebe o identificador do pipeline de eventos existente e o evento que deseja enviar.E_PF_API_CLIENT_REQUEST_RATE_LIMIT_EXCEEDED (0x892354dd)
Mudando para a autenticação de entidade ou atualizando a entidade
Se um pipeline tiver sido criado usando apenas uma configuração de chave de telemetria, há uma forma de mudar para a autenticação de entidade, ou de atualizar seu pipeline para usar uma entidade diferente. Usando PFEventPipelineAddUploadingEntity, é possível anexar uma entidade a um pipeline em execução sem precisar reinicializá-lo. Isso também substitui a entidade existente, se houver. Exemplo: Um Telemetry Event Pipeline é criado com a configuração de chave de telemetria no início da execução do título. Possíveis motivos para isso são que ainda não há uma identidade de jogador ou que você ainda não quer registrar nada relacionado a um jogador.Mudando para a autenticação por chave de telemetria
Ampliando o cenário anterior, se o desenvolvedor quiser voltar à autenticação de telemetria e desanexar o registro de eventos da entidade, poderá chamar PFEventPipelineRemoveUploadingEntity e passar o identificador do pipeline de eventos assim:Atualizar a configuração do pipeline
Você pode atualizar pipelines usando a API PFEventPipelineUpdateConfiguration, que recebe o identificador do pipeline de eventos existente e um novo struct de configuração, da seguinte forma:Chaves de telemetria inválidas/desativadas
Caso uma chave de telemetria seja desativada ou uma chave inválida seja fornecida na criação do pipeline, todos os pipelines de eventos em execução com essa chave de telemetria começarão a falhar assim que descobrirem que a chave é inválida ou foi desativada. Caso o cliente reative a chave, o pipeline não perceberá isso e continuará enviando falhas pelo manipulador de eventos com falha. Vale mencionar que esse comportamento é baseado em sessão, o que significa que, se o título for reiniciado, um novo pipeline será criado e poderá carregar eventos novamente.Ciclo de vida do identificador do pipeline
Como outros identificadores do PlayFab, os identificadores de pipeline de eventos usam um padrão de duplicar/fechar:- PFEventPipelineCloseHandle: fecha um identificador de pipeline. Quando o último identificador de um pipeline é fechado, o pipeline é destruído e todos os eventos restantes no buffer são enviados.
- PFEventPipelineDuplicateHandle: duplica um identificador de pipeline. Tanto o identificador original quanto o duplicado devem ser fechados de forma independente com PFEventPipelineCloseHandle.
