ПишСм ΠΌΠ°Ρ‚Ρ‡ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³ для Π”ΠΎΡ‚Ρ‹ 2014 Π³ΠΎΠ΄Π°

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚.

Π­Ρ‚ΠΎΠΉ вСсной я наткнулся Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ рСбята Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Dota 2 сСрвСр вСрсии 2014 Π³ΠΎΠ΄Π° ΠΈ, соотвСтствСнно, ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΌ. Π― большой Ρ„Π°Π½Π°Ρ‚ этой ΠΈΠ³Ρ€Ρ‹, ΠΈ Π½Π΅ смог ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΌΠΈΠΌΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ возмоТности ΠΎΠΊΡƒΠ½ΡƒΡ‚ΡŒΡΡ Π² своС дСтство.

ΠžΠΊΡƒΠ½ΡƒΠ»ΡΡ я ΠΎΡ‡Π΅Π½ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ, ΠΈ Ρ‚Π°ΠΊ Π²Ρ‹ΡˆΠ»ΠΎ Ρ‡Ρ‚ΠΎ я написал Discord Π±ΠΎΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ практичСски Π·Π° вСсь Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ поддСрТиваСтся Π² старой вСрсии ΠΈΠ³Ρ€Ρ‹, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠ°Ρ‚Ρ‡ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³.
Π”ΠΎ всСх Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ с Π±ΠΎΡ‚ΠΎΠΌ Π»ΠΎΠ±Π±ΠΈ создавалось Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π‘ΠΎΠ±ΠΈΡ€Π°Π»ΠΈ 10 Ρ€Π΅Π°ΠΊΡ†ΠΈΠΉ Π½Π° сообщСниС ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ собирали сСрвСр, Π»ΠΈΠ±ΠΎ хостили локальноС Π»ΠΎΠ±Π±ΠΈ.

ПишСм ΠΌΠ°Ρ‚Ρ‡ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³ для Π”ΠΎΡ‚Ρ‹ 2014 Π³ΠΎΠ΄Π°

Моя Π½Π°Ρ‚ΡƒΡ€Π° программиста Π½Π΅ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠ°Π»Π° Ρ‚Π°ΠΊΠΎΠ΅ количСство Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΈ Π·Π° Π½ΠΎΡ‡ΡŒ я набросал ΡΠ°ΠΌΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π±ΠΎΡ‚Π°, которая автоматичСски ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π»Π° сСрвСр, ΠΊΠΎΠ³Π΄Π° Π½Π°Π±ΠΈΡ€Π°Π»ΠΎΡΡŒ 10 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.

ΠŸΠΈΡΠ°Ρ‚ΡŒ сходу Ρ€Π΅ΡˆΠΈΠ» Π½Π° nodejs, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ люблю ΠΏΠΈΡ‚ΠΎΠ½, Π½Ρƒ ΠΈ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½Π΅Π΅ сСбя Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽ Π² этой срСдС.

Π­Ρ‚ΠΎ ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ написания Π±ΠΎΡ‚Π° для Discord, Π½ΠΎ оказалось всС ΠΎΡ‡Π΅Π½ΡŒ Π΄Π°ΠΆΠ΅ просто. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ npm ΠΌΠΎΠ΄ΡƒΠ»ΡŒ discord.js прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сообщСниями, сбором Ρ€Π΅Π°ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‚.Π΄.

ДисклСймСр: всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Β«Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈΒ», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡˆΠ»ΠΈ нСсколько ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ пСрСписывания ΠΏΠΎ Π½ΠΎΡ‡Π°ΠΌ.

Основа ΠΌΠ°Ρ‚Ρ‡ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³Π° β€” это Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈΠ³Ρ€ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΈΠ³Ρ€Π°Ρ‚ΡŒ, ΠΈ ΡƒΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° расхотСли ΠΈΠ»ΠΈ нашли ΠΈΠ³Ρ€Ρƒ.

Π’Π°ΠΊ выглядит ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Β«ΠΈΠ³Ρ€ΠΎΠΊΠ°Β». Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ это Π±Ρ‹Π» просто id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Discord, Π½ΠΎ Π² ΠΏΠ»Π°Π½Π°Ρ… Π»Π°ΡƒΠ½Ρ‡Π΅Ρ€/поиск ΠΈΠ³Ρ€Ρ‹ с сайта, Π½ΠΎ ΠΎΠ±ΠΎ всСм ΠΏΠΎ порядку.

export enum Realm {
  DISCORD,
  EXTERNAL,
}

export default class QueuePlayer {
  constructor(public readonly realm: Realm, public readonly id: string) {}

  public is(qp: QueuePlayer): boolean {
    return this.realm === qp.realm && this.id === qp.id;
  }

  static Discord(id: string) {
    return new QueuePlayer(Realm.DISCORD, id);
  }

  static External(id: string) {
    return new QueuePlayer(Realm.EXTERNAL, id);
  }
}

А Π²ΠΎΡ‚ интСрфСйс ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π’ΡƒΡ‚ вмСсто Β«ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ²Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ абстракция Π² Π²ΠΈΠ΄Π΅ Β«Π³Ρ€ΡƒΠΏΠΏΡ‹Β». Для ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π³Ρ€ΡƒΠΏΠΏΠ° состоит ΠΈΠ· Π½Π΅Π³ΠΎ самого, Π° для ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² Π² Π³Ρ€ΡƒΠΏΠΏΠ΅, соотвСтствСнно, ΠΈΠ· всСх ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² Π³Ρ€ΡƒΠΏΠΏΡ‹.

export default interface IQueue extends EventEmitter {
  inQueue: QueuePlayer[]
  put(uid: Party): boolean;
  remove(uid: Party): boolean;
  removeAll(ids: Party[]): void;

  mode: MatchmakingMode
  roomSize: number;
  clear(): void
}

РСшил ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ события для ΠΎΠ±ΠΌΠ΅Π½Π° контСкстом. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠ»ΠΎ ΠΏΠΎΠ΄ кСйсы β€” ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ Β«Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΈΠ³Ρ€Π° для 10 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΒ» ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² Π»ΠΈΡ‡Π½Ρ‹Π΅ сообщСния ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌ Π½ΡƒΠΆΠ½ΠΎΠ΅ сообщСниС, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ β€” Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ таск для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ готовности, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π»ΠΎΠ±Π±ΠΈ ΠΊ запуску ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Для IOC я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ InversifyJS. ИмСю приятный ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ. Быстро ΠΈ просто!

ΠžΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Ρƒ нас Π½Π° сСрвСрС нСсколько β€” добавились Ρ€Π΅ΠΆΠΈΠΌΠΈ 1Ρ…1, ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ/Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΎΠ²Ρ‹ΠΉ, ΠΈ ΠΏΠ°Ρ€Π° кастомок. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ singleton RoomService, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅ΠΆΠΈΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ поиском ΠΈΠ³Ρ€Ρ‹.

constructor(
    @inject(GameServers) private gameServers: GameServers,
    @inject(MatchStatsService) private stats: MatchStatsService,
    @inject(PartyService) private partyService: PartyService
  ) {
    super();
    this.initQueue(MatchmakingMode.RANKED);
    this.initQueue(MatchmakingMode.UNRANKED);
    this.initQueue(MatchmakingMode.SOLOMID);
    this.initQueue(MatchmakingMode.DIRETIDE);
    this.initQueue(MatchmakingMode.GREEVILING);
    this.partyService.addListener(
      "party-update",
      (event: PartyUpdatedEvent) => {
        this.queues.forEach((q) => {
          if (has(q.queue, (t) => t.is(event.party))) {
            // if queue has this party, we re-add party
            this.leaveQueue(event.qp, q.mode)
            this.enterQueue(event.qp, q.mode)
          }
        });
      }
    );

    this.partyService.addListener(
      "party-removed",
      (event: PartyUpdatedEvent) => {
        this.queues.forEach((q) => {
          if (has(q.queue, (t) => t.is(event.party))) {
            // if queue has this party, we re-add party
            q.remove(event.party)
          }
        });
      }
    );
  }

(Π›Π°ΠΏΡˆΠ° ΠΊΠΎΠ΄Π° для прСдставлСния, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ выглядят процСссы)

Π—Π΄Π΅ΡΡŒ я ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΈΠ³Ρ€Ρ‹, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΠ»ΡƒΡˆΠ°ΡŽ измСнСния Β«Π³Ρ€ΡƒΠΏΠΏΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ².

Π’Π°ΠΊ, я ΠΌΠΎΠ»ΠΎΠ΄Π΅Ρ†, я вставил куски ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ относятся ΠΊ Ρ‚ΠΎΠΏΠΈΠΊΡƒ, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΡƒΠΆΠ΅ нСпосрСдствСнно ΠΊ ΠΌΠ°Ρ‡Ρ‚ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³Ρƒ.

Рассмотрим кСйс:

1) ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ.

2) Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ поиск, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Gateway=Discord, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ставит Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° сообщСниС:

ПишСм ΠΌΠ°Ρ‚Ρ‡ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³ для Π”ΠΎΡ‚Ρ‹ 2014 Π³ΠΎΠ΄Π°

3) Π­Ρ‚ΠΎΡ‚ Π³Π΅ΠΉΡ‚Π²Π΅ΠΉ ΠΈΠ΄Π΅Ρ‚ Π² RoomService, ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Β«ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ· дискорда Ρ…ΠΎΡ‡Π΅Ρ‚ Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ€Π΅ΠΆΠΈΠΌ: нСрСйтинговая ΠΈΠ³Ρ€Π°Β».

4) RoomService ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΡΡŒΠ±Ρƒ гСйтвСя, ΠΈ ΠΏΠΈΡ…Π°Π΅Ρ‚ Π² Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ(Ρ‚ΠΎΡ‡Π½Π΅Π΅, Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ).

5) ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ провСряСт, Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π»ΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² для ΠΈΠ³Ρ€Ρ‹. Если ΠΌΠΎΠΆΠ½ΠΎ β€” эмиттим событиС:

private onRoomFound(players: Party[]) {
    this.emit("room-found", {
      players,
    });
  }

6) RoomService, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, с Ρ€Π°Π΄ΠΎΡΡ‚ΡŒΡŽ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π² Ρ‚Ρ€Π΅ΠΏΠ΅Ρ‚Π½ΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ этого события. На Π²Ρ…ΠΎΠ΄ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ· Π½ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Β«ΠΊΠΎΠΌΠ½Π°Ρ‚ΡƒΒ», ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, эмиттим событиС:

queue.addListener("room-found", (event: RoomFoundEvent) => {
      console.log(
        `Room found mode: [${mode}]. Time to get free room for these guys`
      );
      const room = this.getFreeRoom(mode);
      room.fill(event.players);

      this.onRoomFormed(room);
    });

7) Π’ΠΎΡ‚ ΠΌΡ‹ ΠΈ Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π΄ΠΎ Β«Π²Ρ‹ΡΡˆΠ΅ΠΉΒ» инстанции β€” класса Bot. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΎΠ½ занимаСтся связью ΠΌΠ΅ΠΆΠ΄Ρƒ гСйтвСями(ΠΊΠ°ΠΊ это смСшно Π½Π° русском выглядит я Π½Π΅ ΠΌΠΎΠ³Ρƒ) ΠΈ бизнСс Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΌΠ°Ρ‚Ρ‡ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³Π°. Π‘ΠΎΡ‚ ΠΏΠΎΠ΄ΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚ событиС, ΠΈ ΠΏΡ€ΠΈΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ DiscordGateway ΠΎΡ‚ΠΎΡΠ»Π°Ρ‚ΡŒ всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ.

ПишСм ΠΌΠ°Ρ‚Ρ‡ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³ для Π”ΠΎΡ‚Ρ‹ 2014 Π³ΠΎΠ΄Π°

8) Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΠ» ΠΈΠ»ΠΈ Π½Π΅ принял ΠΈΠ³Ρ€Ρƒ Π·Π° 3 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, Ρ‚ΠΎ ΠΌΡ‹ НЕ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΈΡ… Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. ВсСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ ΠΆΠ΄Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° снова набСрСтся 10 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. Если всС ΠΈΠ³Ρ€ΠΎΠΊΠΈ приняли ΠΈΠ³Ρ€Ρƒ, Ρ‚ΠΎ начинаСтся интСрСсная Ρ‡Π°ΡΡ‚ΡŒ.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ сСрвСра

Π£ нас ΠΈΠ³Ρ€Ρ‹ хостятся Π½Π° VDS c Windows server 2012. Из этого ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ²:

  1. На Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ Π΄ΠΎΠΊΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Ρ€ΠΈΠ»ΠΎ мСня Π² самоС сСрдцС
  2. ΠœΡ‹ экономим Π½Π° Π°Ρ€Π΅Π½Π΄Π΅

Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°Π΄Π°Ρ‡Π°: с VPS Π½Π° линуксС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ процСсс Π½Π° VDS. Написал простой сСрвСр Π½Π° Flask. Π”Π°, Π½Π΅ люблю ΠΏΠΈΡ‚ΠΎΠ½, Π½ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” Π½Π° Π½Π΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ этот сСрвСр быстрСС ΠΈ ΠΏΡ€ΠΎΡ‰Π΅.

Он выполняСт 3 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  1. Запуск сСрвСра с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ β€” Π²Ρ‹Π±ΠΎΡ€ ΠΊΠ°Ρ€Ρ‚Ρ‹, количСства ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² для старта ΠΈΠ³Ρ€Ρ‹, ΠΈ Π½Π°Π±ΠΎΡ€ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ². ΠŸΡ€ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ сСйчас Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΈΡΠ°Ρ‚ΡŒ β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ история с Π»ΠΈΡ‚Ρ€Π°ΠΌΠΈ ΠΊΠΎΡ„Π΅ ΠΏΠΎ Π½ΠΎΡ‡Π°ΠΌ Π²ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΊΡƒ со слСзами ΠΈ Π²Ρ‹Ρ€Π²Π°Π½Π½Ρ‹ΠΌΠΈ волосами.
  2. ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ°/пСрСзапуск сСрвСра Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π’ΡƒΡ‚ всС просто, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π΄Π°ΠΆΠ΅ нСумСстны. Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π½Π° 100 строчСк

Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° 10 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΡΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ вмСстС ΠΈ приняли ΠΈΠ³Ρ€Ρƒ, Π·Π°ΠΏΡƒΡ‰Π΅Π½ сСрвСр ΠΈ всС ΠΆΠ°ΠΆΠ΄ΡƒΡ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ, Π² Π»ΠΈΡ‡Π½Ρ‹Π΅ сообщСния ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ссылка Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠ³Ρ€Π΅.

ПишСм ΠΌΠ°Ρ‚Ρ‡ΠΌΠ΅ΠΉΠΊΠΈΠ½Π³ для Π”ΠΎΡ‚Ρ‹ 2014 Π³ΠΎΠ΄Π°

По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ссылки ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΈΡ‚ ΠΊ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌΡƒ сСрвСру, ΠΈ дальшС ΡƒΠΆΠ΅ само всС. Π§Π΅Ρ€Π΅Π· ~25 ΠΌΠΈΠ½ΡƒΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ Β«ΠΊΠΎΠΌΠ½Π°Ρ‚Π°Β» с ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌΠΈ очищаСтся.

Π—Π°Ρ€Π°Π½Π΅Π΅ извиняюсь Π·Π° Π½Π΅ΡΠΊΠ»Π°Π΄Π½ΠΎΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π΄Π°Π²Π½ΠΎ Π½Π΅ писал сюда, Π΄Π° ΠΈ ΠΊΠΎΠ΄Π° слишком ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ участки. Π›Π°ΠΏΡˆΠ°, ΠΊΠΎΡ€ΠΎΡ‡Π΅.

Если ΡƒΠ²ΠΈΠΆΡƒ интСрСс ΠΊ Ρ‚Π΅ΠΌΠ΅, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ вторая Ρ‡Π°ΡΡ‚ΡŒ β€” Π² Π½Π΅ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠΎΠΈ мучСния с ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ для srcds(Source dedicated server), ΠΈ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, систСма Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³Π° ΠΈ ΠΌΠΈΠ½ΠΈ-dotabuff, сайт со статистикой ΠΈΠ³Ρ€.

НСмного ссылок:

  1. Наш сайт(статистика, Ρ‚Π°Π±Π»ΠΈΡ†Π° Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ², нСбольшой лСндос ΠΈ скачиваниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°)
  2. Discord сСрвСр

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ