Document Orleans ports and cover grain deactivation
CI / test (push) Successful in 1m27s Details

This commit is contained in:
MpakobecEx 2026-10-21 16:21:37 +05:00
parent f60805d27c
commit 67d48b11d3
3 changed files with 14 additions and 4 deletions

View File

@ -49,6 +49,11 @@ dotnet run --project server/src/Vanguard.Server --urls http://localhost:5080
# проверка: http://localhost:5080/health
```
Orleans по умолчанию выключен; `Orleans__Enabled=true` включает silo в том же
процессе. В `docker-compose.yml` он уже включён; для локального запуска без
Orleans ничего дополнительно настраивать не нужно. Состояние соединений
остаётся в процессе, поэтому несколько реплик сервера пока не поддерживаются.
Контейнер: `docker compose up --build`, затем `http://localhost:8080/health`.
Порт задаётся в `.env` (`VANGUARD_PORT`, `VANGUARD_WS_URL`); стек включает
PostgreSQL и Redis (AOF). HTTP-контракт очереди и тикетов — `docs/server-api.md`.

View File

@ -257,11 +257,13 @@ Solution — **`server/Vanguard.slnx`**, не `.sln`.
`Storage:ConnectionString`; `Redis:Configuration`. `Memory` — EF InMemory
для тестов, `Postgres` — постоянное хранилище.
- **Orleans**: `Orleans:Enabled` (`false` по умолчанию, `true` в compose).
Включённый режим поднимает silo с localhost-clustering в том же процессе;
Включённый режим поднимает silo с localhost-clustering в том же процессе
(`Orleans:SiloPort` / `GatewayPort`, по умолчанию 11111/30000);
`MatchActorGrain` держит доменный `MatchGrain`, `IMatchConnectionRegistry`
остаётся в процессе. Граны `[KeepAlive]`: WebSocket нельзя потерять при
выгрузке. Один silo на инстанс; для нескольких реплик нужен настоящий
кластер и внешний реестр соединений. Тест кластера — `OrleansMatchTests`.
выгрузке; завершённые матчи выгружаются после `CompletedMatchTtlSeconds`.
Один silo на инстанс; для нескольких реплик нужен настоящий кластер и
внешний реестр соединений. Тест кластера — `OrleansMatchTests`.
- **Docker**: `Dockerfile` + `docker-compose.yml` поднимают postgres, redis
(AOF) и сервер; `/health` на `http://localhost:8080` (порт меняется
через `VANGUARD_PORT`, адрес WebSocket — `VANGUARD_WS_URL`).
@ -471,7 +473,8 @@ Solution — **`server/Vanguard.slnx`**, не `.sln`.
включается `Orleans:Enabled=true`, в compose включён. `MatchGrain` остался
доменным ядром, соединения вынесены в `IMatchConnectionRegistry`,
`MatchActorGrain` восстанавливается из снапшота на активации. Покрыто
`OrleansMatchTests` (тестовый кластер).
`OrleansMatchTests` (тестовый кластер) и `OrleansServerE2ETests` (полный
матч через HTTP/WebSocket при включённом silo).
Критерий готовности серверного блока выполнен: два клиента играют полный
матч по сети; kill клиента восстанавливается через новый тикет и

View File

@ -67,6 +67,8 @@ public class OrleansMatchTests
Assert.True(after.EventSeq >= summary.EventSeq);
Assert.True(await actor.HasPlayerAsync("p1"));
Assert.False(await actor.HasPlayerAsync("stranger"));
await actor.DeactivateAsync();
}
finally
{