Leggyorsabb kommunikáció Javascript és asp.net szerveroldal közt
Sziasztok, a következő problémát szeretném megoldani;
Van egy játéktér, rajta 9 játékos. Mindenki irányítja a saját kis elemét (div) a képernyőn WSAD gombok segítségével. A lényeg az, hogy nekem (mint játékosnak) mindig aktuális képet kell, hogy kapjak a többi játékos aktuális pozíciójáról. Ennek érdekében folyamatosan küldök ajax kéréseket a szervernek (az adatok json-ben mennek át), ami a MemoryCache-ből kiolvassa a játékosok koordinátáit, és visszaküldi a kliensnek válaszként, hogy az befrissíthesse a képernyőn lévő többi játékos margin-left és margin-top -ját.
Az eredmény pedig elég változó. Van amikor nagyon szépen (szinte) élő képet ad a valóságról, van amikor meg tizedmásodpercek is eltelnek.
Nem értem, hogy minek köszönhető ez az ingadozás, és azt se tudom, hogy ezért a kliensoldal a felelős, vagy a szerveroldal. Nagyon minimális adatról van szó, a performancia érdekében csak egyszerű string-et küldök át json-ben, tehát még csak objektumot se kell serializálni a folyamat során.
Van valami tippetek arra, hogy miért ingadozik ennyire? Ez valami protokollbeli jelenség lehet sztem, csak nincsenek ehhez kellő mélységű ismereteim.
■ Van egy játéktér, rajta 9 játékos. Mindenki irányítja a saját kis elemét (div) a képernyőn WSAD gombok segítségével. A lényeg az, hogy nekem (mint játékosnak) mindig aktuális képet kell, hogy kapjak a többi játékos aktuális pozíciójáról. Ennek érdekében folyamatosan küldök ajax kéréseket a szervernek (az adatok json-ben mennek át), ami a MemoryCache-ből kiolvassa a játékosok koordinátáit, és visszaküldi a kliensnek válaszként, hogy az befrissíthesse a képernyőn lévő többi játékos margin-left és margin-top -ját.
Az eredmény pedig elég változó. Van amikor nagyon szépen (szinte) élő képet ad a valóságról, van amikor meg tizedmásodpercek is eltelnek.
Nem értem, hogy minek köszönhető ez az ingadozás, és azt se tudom, hogy ezért a kliensoldal a felelős, vagy a szerveroldal. Nagyon minimális adatról van szó, a performancia érdekében csak egyszerű string-et küldök át json-ben, tehát még csak objektumot se kell serializálni a folyamat során.
Van valami tippetek arra, hogy miért ingadozik ennyire? Ez valami protokollbeli jelenség lehet sztem, csak nincsenek ehhez kellő mélységű ismereteim.
WebSockets
Igazad van, utána néztem,
Még sosem volt rá szükségem,
No para
Tényleg nem bonyolult, egyszerű hívás meg kivételkezelés. A problémám csak az, hogy
az egész alapja, hogy be kell írni a ws protokoll-nak hogy hol a webservicem (ez
egy abszolút elérés) és képtelen megtalálni azt amit az ajax megtalál. Félek hogy valamit rosszul írok be.
ajaxnál így nézett ki:
url: "/WebServices/Game.asmx/metodusnev",
de mintha itt nem lenne ennyi elég neki. Beírom a tejles elérést, de az se jó;
var ws = new WebSocket("ws://localhost:1090/WebServices/Game.asmx/metodusnev");
Próbáltam már localhost nélkül, portszám nélkül, metódusnév nélkül (bár ennek sok értelme nem volt :) ).
Kezdetben az ajaxal is így voltam, halál mire az ember felépíti az első kapcsolatát...
Valszeg azért nem találja,
http://stackoverflow.com/questions/9570522/how-to-implement-socket-io-with-asp-net-iisnode-node-js-and-sql-server-for-ev
Valszeg ASP.NET-tel nem fog menni a dolog. Van olyan, hogy signalR, ami hasonlókra képes, mint socket.io, talán azzal lehet ilyesmit, passz...
send metódus
A probléma abból adódik, hogy ugyan Te létrehoztad a Websocket objektumot, ami figyel is a megadott címen, de nem küldesz és nem fogadsz rajta adatot. Van egy jó kis tutorial a HTML5 Rocks oldalon. Ahogy ebben is írni fogja a ws.send metódussal tudsz adatot küldeni, illetve lesz egy onmessage event listenered, amivel pedig a szervertől jövő adatokat tudod fogadni. Egy példával élve, ez olyan mintha AJAX-ban próbálnál meg adatot küldeni, viszont csak az URL-t és az átadandó adatok adnád meg egy változóban és várnád, hogy megtörténjen a request.
Mar faraszto ez a mindig
Amire van kesz megoldas, hasznald, ne talald fel ujra a kereket, 99% esellyel nem fogsz olyan jot irni mint egy evek ota fejlesztett open source cucc.
Ha tanulni akarsz, kesobb, amikor mar hasznaltal egy libraryt beleashatod magad, tenyleg tanulsagos lesz es gyumolcsozo ha el akarsz benne melyedni.
Használj socket.io-t,
Kösz mindenkinek
ui.: ha valaki hasonlót szeretne csinálni, szóljon, segíthetek, vagy küldhetek példakódot.
Írj egy összefoglaló