Pitanje:
Kako je dizajnirana arhitektura internetskih šahovskih motora?
Ram
2020-06-09 10:33:50 UTC
view on stackexchange narkive permalink

Nedavno sam izradio šahovski stroj pomoću javascripta ( https://github.com/Ram-the-coder/ai-chess-engine-v2). Pokreće se u pregledniku - zbog toga kada šahovski stroj računa najbolji potez, web stranica ne reagira. Pa sam pomislio ako premjestim obradu na poslužitelj, onda mogu ukloniti neodzivnost. Ali ako to učinim, onda moram održavati stanje igre za svakog klijenta poslužitelja. Mislim da je veličina stanja igre u megabajtima jer uključuje hash tablice.

Još jedan problem s kojim sam se suočio u održavanju obrade na strani klijenta je taj što brzina obrade postaje ovisna o uređaju klijenta .

Kako se obično grade takvi internetski šahovski motori?

Mislim da pohranjivanje stanja igre u memoriju nije dobro jer poslužitelj mora služiti mnogim klijentima. Možda bi spremanje u bazu podataka na istom poslužitelju moglo funkcionirati ...

Ako koristim arhitekturu klijent-poslužitelj, neće li mi biti ograničeno posluživanje jednog zahtjeva klijenta po poslužitelju odjednom? Ako je odgovor da, kako mrežni šahovski motori mogu istovremeno služiti neograničenim klijentima?

obično UCI šahovski motori (koji se mogu pokretati putem interneta) koriste zasebnu nit za pretraživanje. To u potpunosti ovisi o hardveru na kojem radi. Ali ako je js, pretpostavljam da se izvodi na klijentskom računalu, zar ne? Stoga biste trebali pokušati koristiti zasebnu nit.
Mislio sam da je višestruko uvijanje niti u pregledniku nemoguće. Nakon nekog pretraživanja, upravo sam pronašao web radnike. Možda bih to trebao iskoristiti. Hvala vam.
Čak i prije nego što rade web zaposlenici, mogli biste obaviti sićušan posao, a zatim objaviti događaj da biste napravili sljedeći korak, oponašajući "suradničko multithreading".
Dva odgovori:
Stephen
2020-06-09 12:28:02 UTC
view on stackexchange narkive permalink

Lichess koristi WebAssembly (Wasm) - kako je navedeno na stranici za analizu ("Stockfish 10+ WASM u lokalnom pregledniku"). Wasm je očigledna stvar za korištenje, jer se izvodi na klijentskoj strani, ali je brži od JavaScript-a.

Pokretanje Stockfish-a u web pregledniku obično se vrši pomoću priključka Wasm + JavaScript-a Niklas Fiekas-a Stockfish, što Lichess koristi. Sastoji se od Wasm datoteke stockfish.wasm koja sadrži sam motor i manje JavaScript datoteke stockfish.wasm.js koja kontrolira upotrebu motora. (Postoji i velika datoteka stockfish.js koja se koristi kao rezervni preglednik u preglednicima kojima nedostaje izvorna podrška za Wasm.)

Vau lijepo. Ja ću to pogledati. Hvala.
SmallChess
2020-06-09 13:45:51 UTC
view on stackexchange narkive permalink

WASM definira kako se motor sastavlja, ali ne i kako radi. Preglednički šahovski motori uvijek rade na web radniku u JavaScript-u.

Primjer koda za pokretanje šahovskog stroja na web pregledniku:

  const x = new Worker ('/ stockfish.js') x.postMessage ("uci")  
Ne biste trebali bezuvjetno pokretati stockfish.js. Kao što navodi dokumentacija, trebali biste testirati podržava li preglednik Wasm, a zatim pokrenuti ili stockfish.wasm.js ili stockfish.js, prema potrebi. A ako pokrenete stockfish.wasm.js, on će upotrijebiti izvornu Wasm podršku preglednika za pokretanje datoteke stockfish.wasm.


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 4.0 licenci pod kojom se distribuira.
Loading...