เชฌเชงเชพ เชจเซ เชจเชฎเชธเซเชเชพเชฐ.
เช เชตเชธเชเชคเชฎเชพเช เชฎเชจเซ เชเช เชชเซเชฐเซเชเซเชเซเช เชฎเชณเซเชฏเซ เชเซเชฎเชพเช เชฒเซเชเซเช เชกเซเชเชพ 2 เชธเชฐเซเชตเชฐ เชธเชเชธเซเชเชฐเชฃ 2014 เชเซเชตเซ เชฐเซเชคเซ เชเชฒเชพเชตเชตเซเช เชคเซ เชถเซเชเซเชฏเชพ เช เชจเซ เชคเซ เชฎเซเชเชฌ, เชคเซเชจเชพ เชชเชฐ เชฐเชฎเซ. เชนเซเช เช เชฐเชฎเชคเชจเซ เชฎเซเชเซ เชเชพเชนเช เชเซเช, เช เชจเซ เชนเซเช เชฎเชพเชฐเชพ เชฌเชพเชณเชชเชฃเชฎเชพเช เชฎเชพเชฐเซ เชเชพเชคเชจเซ เชฒเซเชจ เชเชฐเชตเชพเชจเซ เช เช เชจเชจเซเชฏ เชคเชเชจเซ เชชเชธเชพเชฐ เชเชฐเซ เชถเชเซเชฏเซ เชจเชฅเซ.
เชฎเซเช เชเซเชฌ เช เชเชเชกเชพเชฃเชชเซเชฐเซเชตเช เชเชฌเซเชคเชฐ เชเชฐเซเชฏเซเช, เช
เชจเซ เชเชตเซเช เชฌเชจเซเชฏเซเช เชเซ เชฎเซเช เชเช เชกเชฟเชธเซเชเซเชฐเซเชก เชฌเซเช เชฒเชเซเชฏเซ เชเซ เชฒเชเชญเช เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชฎเชพเชเซ เชเชตเชพเชฌเชฆเชพเชฐ เชเซ เชเซ เชฐเชฎเชคเชจเชพ เชเซเชจเชพ เชธเชเชธเซเชเชฐเชฃเชฎเชพเช เชธเชชเซเชฐเซเชเซเชก เชจเชฅเซ, เชเชเชฒเซ เชเซ เชฎเซเชเชฎเซเชเชฟเชเช.
เชฌเซเช เชธเชพเชฅเซเชจเซ เชคเชฎเชพเชฎ เชจเชตเซเชจเชคเชพเช เชชเชนเซเชฒเชพเช, เชฒเซเชฌเซ เชฎเซเชจเซเชฏเซเช
เชฒเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ. เช
เชฎเซ เชเช เชธเชเชฆเซเชถ เชชเชฐ 10 เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเช เชเชเชคเซเชฐเชฟเชค เชเชฐเซ เช
เชจเซ เชฎเซเชจเซเชฏเซเช
เชฒเซ เชธเชฐเซเชตเชฐ เชเชธเซเชฎเซเชฌเชฒ เชเชฐเซเชฏเซเช, เช
เชฅเชตเชพ เชธเซเชฅเชพเชจเชฟเช เชฒเซเชฌเซเชจเซเช เชเชฏเซเชเชจ เชเชฐเซเชฏเซเช.
เชชเซเชฐเซเชเซเชฐเชพเชฎเชฐ เชคเชฐเซเชเซเชจเซ เชฎเชพเชฐเซ เชธเซเชตเชญเชพเชต เชเชเชฒเชพ เชฎเซเชจเซเชฏเซเช
เชฒ เชตเชฐเซเชเชจเซ เชธเชพเชฎเชจเซ เชเชฐเซ เชถเชเซเชฏเซ เชจเชนเซเช, เช
เชจเซ เชฐเชพเชคเซเชฐเชพเชค เชฎเซเช เชฌเซเชเชจเซเช เชธเซเชฅเซ เชธเชฐเชณ เชธเชเชธเซเชเชฐเชฃ เชธเซเชเซเช เชเชฐเซเชฏเซเช, เชเซเชฃเซ 10 เชฒเซเชเซ เชนเชคเชพ เชคเซเชฏเชพเชฐเซ เชธเชฐเซเชตเชฐเชจเซ เชเชชเชฎเซเชณเซ เชตเชงเชพเชฐเซ เชฆเซเชงเซเช.
เชฎเซเช เชคเชฐเชค เช เชจเซเชกเชเชฎเชพเช เชฒเชเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช, เชเชพเชฐเชฃ เชเซ เชฎเชจเซ เชเชฐเซเชเชฐ เชชเชพเชฏเชฅเซเชจ เชชเชธเชเชฆ เชจเชฅเซ, เช
เชจเซ เชนเซเช เช เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช เชตเชงเซ เชเชฐเชพเชฎเชฆเชพเชฏเช เช
เชจเซเชญเชตเซเช เชเซเช.
เชกเชฟเชธเซเชเซเชฐเซเชก เชฎเชพเชเซ เชฌเซเช เชฒเชเชตเชพเชจเซ เช เชฎเชพเชฐเซ เชชเชนเซเชฒเซ เช เชจเซเชญเชต เชเซ, เชชเชฐเชเชคเซ เชคเซ เชเซเชฌ เช เชธเชฐเชณ เชฌเชจเซเชฏเซเช. เช เชงเชฟเชเซเชค npm เชฎเซเชกเซเชฏเซเชฒ discord.js เชธเชเชฆเซเชถเชพเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ, เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเช เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพ เชตเชเซเชฐเซ เชฎเชพเชเซ เช เชจเซเชเซเชณ เชเชจเซเชเชฐเชซเซเชธ เชชเซเชฐเซเช เชชเชพเชกเซ เชเซ.
เช เชธเซเชตเซเชเชฐเชฃ: เชฌเชงเชพ เชเซเชก เชเชฆเชพเชนเชฐเชฃเซ "เชตเชฐเซเชคเชฎเชพเชจ" เชเซ, เชเซเชจเซ เช เชฐเซเชฅ เชเซ เชเซ เชคเซเช เชฐเชพเชคเซเชฐเซ เชชเซเชจเชเชฒเซเชเชจเชจเชพ เชเชฃเชพ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจเซเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชฏเชพ เชเซ.
เชฎเซเชเชฎเซเชเชฟเชเชเชจเซ เชเชงเชพเชฐ เช "เชเชคเชพเชฐ" เชเซ เชเซเชฎเชพเช เชเซ เชเซเชฒเชพเชกเซเช เชฐเชฎเชตเชพ เชฎเชพเชเชเซ เชเซ เชคเซเชฎเชจเซ เชฎเซเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เชเซเชฏเชพเชฐเซ เชคเซเช เชฐเชฎเชค เชจ เชเชฐเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซเชฏ เช เชฅเชตเชพ เชถเซเชงเซ เชถเชเชคเชพ เชจเชฅเซ เชคเซเชฏเชพเชฐเซ เชคเซเชฎเชจเซ เชฆเซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
"เชเซเชฒเชพเชกเซ" เชจเซ เชธเชพเชฐ เช เชเซเชตเซ เชฆเซเชเชพเชฏ เชเซ. เชถเชฐเซเชเชคเชฎเชพเช เชคเซ เชกเชฟเชธเซเชเซเชฐเซเชกเชฎเชพเช เชฎเชพเชคเซเชฐ เชเช เชฏเซเชเชฐ เชเชเชกเซ เชนเชคเซเช, เชชเชฐเชเชคเซ เชธเชพเชเช เชชเชฐเชฅเซ เชเซเชฎเซเชธเชจเซ เชฒเซเชจเซเช/เชธเชฐเซเช เชเชฐเชตเชพเชจเซ เชฏเซเชเชจเชพ เชเซ, เชชเชฐเชเชคเซ เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซเช.
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 เชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช. เชฎเชจเซ เช เชชเซเชธเซเชคเชเชพเชฒเชฏ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพเชจเซ เชเชจเชเชฆเชฆเชพเชฏเช เช เชจเซเชญเชต เชเซ. เชเชกเชชเซ เช เชจเซ เชธเชฐเชณ!
เช เชฎเชพเชฐเซ เชชเชพเชธเซ เช เชฎเชพเชฐเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชเชฃเซ เชเชคเชพเชฐ เชเซ - เช เชฎเซ 1x1, เชธเชพเชฎเชพเชจเซเชฏ/เชฐเซเชเซเชก เช เชจเซ เชเซเชเชฒเชพเช เชเชธเซเชเชฎ เชฎเซเชก เชเชฎเซเชฐเซเชฏเชพ เชเซ. เชคเซเชฅเซ, เชคเซเชฏเชพเช เชเช เชธเชฟเชเชเชฒเชเชจ เชฐเซเชฎเชธเชฐเซเชตเชฟเชธ เชเซ เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เช เชจเซ เชฐเชฎเชค เชถเซเชง เชตเชเซเชเซ เชเชตเซเชฒเซเช เชเซ.
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 เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชเชเชฒเซ เชเซ, เชธเชเชฆเซเชถ เชชเชฐ เชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชชเซ เชเซ:
3) เช เชเซเชเชตเซ RoomService เชชเชฐ เชเชพเชฏ เชเซ เช
เชจเซ เชเชนเซ เชเซ เชเซ "เชตเชฟเชตเชพเชฆเชฎเชพเชเชฅเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชคเชพเชฐเชฎเชพเช เชฆเชพเชเชฒ เชฅเชตเชพ เชฎเชพเชเชเซ เชเซ, เชฎเซเชก: เช
เชจเชฐเซเชเซเชก เชเซเชฎ."
4) เชฐเซเชฎเชธเชฐเซเชตเชฟเชธ เชเซเชเชตเซเชจเซ เชตเชฟเชจเชเชคเซ เชธเซเชตเซเชเชพเชฐเซ เชเซ เช เชจเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ (เชตเชงเซ เชธเซเชชเชทเซเช เชฐเซเชคเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเซเชฅ) เชจเซ เชเชเซเชเชฟเชค เชเชคเชพเชฐเชฎเชพเช เชงเชเซเชฒเซ เชเซ.
5) เชฆเชฐ เชตเชเชคเซ เชเซเชฏเชพเชฐเซ เชฐเชฎเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชคเชพ เชเซเชฒเชพเชกเซเช เชนเซเชฏ เชคเซเชฏเชพเชฐเซ เชเชคเชพเชฐ เชคเชชเชพเชธเซ เชเซ. เชเซ เชถเชเซเชฏ เชนเซเชฏ เชคเซ, เชเช เชเชเชจเชพ เชฌเชนเชพเชฐ เชเชพเชขเซ:
private onRoomFound(players: Party[]) {
this.emit("room-found", {
players,
});
}
6) เชฐเซเชฎเชธเชฐเซเชตเชฟเชธ เชฆเซเชเซเชคเซ เชฐเซเชคเซ เช เชเชตเซเชจเซเชเชจเซ เชฌเซเชเซเชจ เช เชชเซเชเซเชทเชพเชฎเชพเช เชฆเชฐเซเช เชเชคเชพเชฐเชจเซ เชเซเชถเซเชฅเซ เชธเชพเชเชญเชณเซ เชฐเชนเซ เชเซ. เช เชฎเซ เชเชจเชชเซเช เชคเชฐเซเชเซ เชเซเชฒเชพเชกเซเชเชจเซ เชธเซเชเชฟ เชชเซเชฐเชพเชชเซเชค เชเชฐเซเช เชเซเช, เชคเซเชฎเชจเซ เชชเชพเชธเซเชฅเซ เชตเชฐเซเชเซเชฏเซเช เชฒ "เชฐเซเชฎ" เชฌเชจเชพเชตเซเช เชเซเช เช เชจเซ, เช เชฒเชฌเชคเซเชค, เชเช เชเชตเซเชจเซเช เชเชพเชฐเซ เชเชฐเซเช เชเซเช:
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) เชคเซเชฅเซ เช เชฎเซ "เชเชเซเช" เชธเชคเซเชคเชพ - เชตเชฐเซเช เชธเซเชงเซ เชชเชนเซเชเชเซเชฏเชพ เชฌเซเช. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ, เชคเซ เชเซเชเชตเซ เชตเชเซเชเซเชจเชพ เชเซเชกเชพเชฃ เชธเชพเชฅเซ เชตเซเชฏเชตเชนเชพเชฐ เชเชฐเซ เชเซ (เชนเซเช เชธเชฎเชเซ เชถเชเชคเซ เชจเชฅเซ เชเซ เชคเซ เชฐเชถเชฟเชฏเชจเชฎเชพเช เชเซเชเชฒเซเช เชฐเชฎเซเชเซ เชฒเชพเชเซ เชเซ) เช เชจเซ เชฎเซเชเชฎเซเชเชฟเชเชเชจเชพ เชตเซเชฏเชตเชธเชพเชฏเชฟเช เชคเชฐเซเช. เชฌเซเช เชเชตเซเชจเซเชเชจเซ เชธเชพเชเชญเชณเซ เชเซ เช เชจเซ เชคเชฎเชพเชฎ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชฐเซเชกเซเชจเซเชธ เชเซเช เชฎเซเชเชฒเชตเชพ เชฎเชพเชเซ DiscordGateway เชจเซ เชเชฆเซเชถ เชเชชเซ เชเซ.
8) เชเซ เชเซเช เชตเซเชฏเชเซเชคเชฟ 3 เชฎเชฟเชจเชฟเชเชจเซ เช
เชเชฆเชฐ เชฐเชฎเชคเชจเซ เชจเชเชพเชฐเซ เช
เชฅเชตเชพ เชธเซเชตเซเชเชพเชฐเซ เชจเชนเซเช, เชคเซ เช
เชฎเซ เชคเซเชฎเชจเซ เชเชคเชพเชฐเชฎเชพเช เชชเชพเชเชพ เชจเชนเซเช เชเชชเซเช. เช
เชฎเซ เชฌเซเชเชพ เชฌเชงเชพเชจเซ เชเชคเชพเชฐเชฎเชพเช เชชเชพเชเชพ เชเชชเซเช เชเซเช เช
เชจเซ 10 เชฒเซเชเซ เชซเชฐเซเชฅเซ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชฐเชพเชน เชเซเช. เชเซ เชฌเชงเชพ เชเซเชฒเชพเชกเซเชเช เชฐเชฎเชค เชธเซเชตเซเชเชพเชฐเซ เชฒเซเชงเซ เชนเซเชฏ, เชคเซ เชชเชเซ เชฐเชธเชชเซเชฐเชฆ เชญเชพเช เชถเชฐเซ เชฅเชพเชฏ เชเซ.
เชธเชฎเชฐเซเชชเชฟเชค เชธเชฐเซเชตเชฐ เชเซเช เชตเชฃเซ
เช เชฎเชพเชฐเซ เชฐเชฎเชคเซ เชตเชฟเชจเซเชกเซเช เชธเชฐเซเชตเชฐ 2012 เชธเชพเชฅเซ VDS เชชเชฐ เชนเซเชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเชจเชพ เชชเชฐเชฅเซ เชเชชเชฃเซ เชเชฃเชพ เชคเชพเชฐเชฃเซ เชเชพเชขเซ เชถเชเซเช เชเซเช:
- เชคเซเชจเชพ เชชเชฐ เชเซเช เชกเซเชเชฐ เชจเชฅเซ, เชเซ เชฎเชพเชฐเชพ เชนเซเชฆเชฏเชฎเชพเช เช เชฅเชกเชพเชฏ เชเซ
- เช เชฎเซ เชญเชพเชกเชพ เชชเชฐ เชฌเชเชค เชเชฐเซเช เชเซเช
เชเชพเชฐเซเชฏ Linux เชชเชฐ VPS เชฎเชพเชเชฅเซ VDS เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฒเชพเชตเชตเชพเชจเซเช เชเซ. เชฎเซเช เชซเซเชฒเชพเชธเซเชเชฎเชพเช เชเช เชธเชฐเชณ เชธเชฐเซเชตเชฐ เชฒเชเซเชฏเซเช. เชนเชพ, เชฎเชจเซ เชชเชพเชฏเชฅเซเชจ เชชเชธเชเชฆ เชจเชฅเซ, เชชเชฃ เชนเซเช เชถเซเช เชเชฐเซ เชถเชเซเช? เช เชธเชฐเซเชตเชฐ เชชเชฐ เชฒเชเชตเซเช เชตเชงเซ เชเชกเชชเซ เช เชจเซ เชธเชฐเชณ เชเซ.
เชคเซ 3 เชเชพเชฐเซเชฏเซ เชเชฐเซ เชเซ:
- เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชธเชพเชฅเซ เชธเชฐเซเชตเชฐ เชถเชฐเซ เชเชฐเชตเซเช - เชจเชเชถเซ เชชเชธเชเชฆ เชเชฐเชตเซ, เชฐเชฎเชค เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชเซเชฒเชพเชกเซเชเชจเซ เชธเชเชเซเชฏเชพ เช เชจเซ เชชเซเชฒเชเชเชจเชจเซ เชธเชฎเซเชน. เชนเซเช เชนเชฎเชฃเชพเช เชชเซเชฒเชเชเชจเซเชธ เชตเชฟเชถเซ เชฒเชเซเชถ เชจเชนเซเช - เชคเซ เชเชเชธเซ เช เชจเซ เชซเชพเชเซเชฒเชพ เชตเชพเชณ เชธเชพเชฅเซ เชฎเชฟเชถเซเชฐเชฟเชค เชฐเชพเชคเซเชฐเซ เชฒเชฟเชเชฐ เชเซเชซเซ เชธเชพเชฅเซเชจเซ เชเช เช เชฒเช เชตเชพเชฐเซเชคเชพ เชเซ.
- เช เชธเชซเชณ เชเชจเซเชเซเชถเชจเซเชธเชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช เชธเชฐเซเชตเชฐเชจเซ เชฐเซเชเชตเซเช/เชชเซเชจเชเชชเซเชฐเชพเชฐเชเชญ เชเชฐเชตเซเช, เชเซเชจเซ เชเชชเชฃเซ เชซเชเซเชค เชฎเซเชจเซเชฏเซเช เชฒเซ เชนเซเชจเซเชกเชฒ เชเชฐเซ เชถเชเซเช เชเซเช.
เช เชนเซเช เชฌเชงเซเช เชธเชฐเชณ เชเซ, เชเซเชก เชเชฆเชพเชนเชฐเชฃเซ เชชเชฃ เชฏเซเชเซเชฏ เชจเชฅเซ. 100 เชฒเซเชเซเชจเซ เชธเซเชเซเชฐเชฟเชชเซเช
เชคเซเชฅเซ, เชเซเชฏเชพเชฐเซ 10 เชฒเซเชเซ เชญเซเชเชพ เชฅเชฏเชพ เช เชจเซ เชฐเชฎเชค เชธเซเชตเซเชเชพเชฐเซ, เชธเชฐเซเชตเชฐ เชถเชฐเซ เชฅเชฏเซเช เช เชจเซ เชฆเชฐเซเช เชเชฃ เชฐเชฎเชตเชพ เชฎเชพเชเซ เชเชคเซเชธเซเช เชนเชคเชพ, เชเชพเชจเชเซ เชธเชเชฆเซเชถเชพเชเชฎเชพเช เชฐเชฎเชค เชธเชพเชฅเซ เชเซเชกเชพเชตเชพ เชฎเชพเชเซเชจเซ เชฒเชฟเชเช เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชตเซ.
เชฒเชฟเชเช เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซเชจเซ, เชชเซเชฒเซเชฏเชฐ เชเซเชฎ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชเซเชกเชพเชฏ เชเซ, เช
เชจเซ เชชเชเซ เชฌเชธ. ~25 เชฎเชฟเชจเชฟเช เชชเชเซ, เชเซเชฒเชพเชกเซเช เชธเชพเชฅเซเชจเซ เชตเชฐเซเชเซเชฏเซเช
เชฒ "เชฐเซเชฎ" เชธเชพเชซ เชฅเช เชเชพเชฏ เชเซ.
เชฒเซเชเชจเซ เช เชฃเชเชกเชคเชพ เชฎเชพเชเซ เชนเซเช เช เชเชพเชเชฅเซ เชฎเชพเชซเซ เชฎเชพเชเชเซ เชเซเช, เชฎเซเช เช เชนเซเช เชฒเชพเชเชฌเชพ เชธเชฎเชฏเชฅเซ เชฒเชเซเชฏเซเช เชจเชฅเซ, เช เชจเซ เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชตเชฟเชญเชพเชเซเชจเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชเซเชฌ เชเซเชก เชเซ. เชจเซเชกเชฒเซเชธ, เชเซเชเชเชฎเชพเช.
เชเซ เชนเซเช เชตเชฟเชทเชฏเชฎเชพเช เชฐเชธ เชเซเชเช, เชคเซ เชฌเซเชเซ เชญเชพเช เชนเชถเซ - เชคเซเชฎเชพเช srcds (เชธเซเชฐเซเชธ เชกเซเชกเชฟเชเซเชเซเชก เชธเชฐเซเชตเชฐ) เชฎเชพเชเซเชจเชพ เชชเซเชฒเชเชเชจเซเชธ เชธเชพเชฅเซเชจเซ เชฎเชพเชฐเซ เชฏเชพเชคเชจเชพ เช เชจเซ เชเชฆเชพเช, เชฐเซเชเชฟเชเช เชธเชฟเชธเซเชเชฎ เช เชจเซ เชฎเชฟเชจเซ-เชกเซเชเชพเชฌเชซ, เชเซเชฎเชจเชพ เชเชเชเชกเชพ เชธเชพเชฅเซเชจเซ เชธเชพเชเช เชนเชถเซ.
เชเซเชเชฒเซเช เชฒเชฟเชเชเซเชธ:
เช เชฎเชพเชฐเซ เชตเซเชฌเชธเชพเชเช (เชเชเชเชกเชพ, เชฒเซเชกเชฐเชฌเซเชฐเซเชก, เชจเชพเชจเซเช เชฒเซเชจเซเชกเชฟเชเช เชชเซเชทเซเช เช เชจเซ เชเซเชฒเชพเชฏเชเช เชกเชพเชเชจเชฒเซเชก) เชกเชฟเชธเซเชเซเชฐเซเชก เชธเชฐเซเชตเชฐ
เชธเซเชฐเซเชธ: www.habr.com