Autor Zpráva
IdemeNaHavaj
Profil
Ahoj

snažím sa naučiť niečo to o websocket a skúšam si urobiť nejakú mini hru ktorá by sa ovládala pohybom myši. Aktuálne mám:

Pripojenie k websocket:
var connection = new WebSocket('wss://moj_web.sk:1234');

Pri pohybe myši posielanie aktuálnej pozície cez binary frame:
      $("body").mousemove(function( event ) {
       
        var data = {
          name: "lol",
          pos: [event.pageX, event.pageY]
        };
        
        //convert to binary frame
        var data2 = new Uint16Array(data);
        console.log(data2); // []

       connection.send(data2); // Binary Frame (Opcode 2, mask) | length: 0

      });

A na serverovej strane si aktuálne správu len preposielam späť:
connection.on('message', function(message) {
    for (var i = players.length - 1; i >= 0; i--) {
        players[i].connection.send(message.binaryData);
    }
});

Čo by som chcel vedieť: Ako môžem na serverovej strane prekonvertovať ten Binary Frame späť do čitatelnej podoby aby som mohol updatnúť aktuálnu pozíciu myške a zaslať aktualizáciu všetkým pripojeným?
Radek9
Profil
IdemeNaHavaj:
Co konkrétně myslíš, že dělá ten řádek 9? Na řádku 10 a 12 přeci vidíš, že to je jen prázdné pole. Proč prostě nepošleš JSON string?
IdemeNaHavaj
Profil
Radek9:
Co konkrétně myslíš, že dělá ten řádek 9?
To presne neviem ale myslel som že prekonvertuje objekt data (v ktorom je name "lol" a pozícia) do toho "Binary frame".

Na řádku 10 a 12 přeci vidíš, že to je jen prázdné pole.
A prečo je, prosím, prázdne keď som tam uložil cez "Uint16Array" data objekt?

Proč prostě nepošleš JSON string?
Pretože si myslím že keď je konzola plná textu "Binary Frame" tak je to rýchlejšie ako keby tam malo skákať každú sekundu niekolko znakový objekt :-). Ak sa mýlim, tak dôvod mením na: pretože posielať strinky už viem, teraz chcem vedieť posielať Binary Frame.
Radek9
Profil
IdemeNaHavaj:
že prekonvertuje objekt data do toho "Binary frame".
To ne. Ta funkce prostě jen vytvoří prázdné pole, protože netuší, co má s tím objektem dělat. Do Uint16Array můžeš logicky uložit jen 16bitová celá nezáporná čísla. To, jak ten objekt do 16bitových čísel převedeš, je ale už na tobě. Proto ti říkám, že je mnohem jednodušší použít JSON, než si vymýšlet vlastní binární formát.
IdemeNaHavaj
Profil
Radek9:
To som nevedel ze to vytvori prazdne pole. Nasiel som si na nete funkcie ktoré vedia konvertovať tam a späť bez problémov. Takže téma vyriešená.
Radek9
Profil
IdemeNaHavaj:
Já pořád nechápu, proč to děláš tak složitě. Navíc ty funkce, cos poslal, stejně jen konvertují string na binární pole a obráceně. Takže tvůj problém serializace objektu neřeší, ne?
IdemeNaHavaj
Profil
Radek9:
Hlavne mi šlo o to aby sa cez websocket neposielali dlhé stringy ale len 2-3 slová, určite je to rýchlejšie ako keby tam mal byť niekolko desiatok/stoviek krát (pri vačšom počte hráčov možno aj tisíc krát) za sekundu všetky údaje o každom hráčovy (meno, pozícia, body, level a neviem čo všetko ma v buducnosti napadne)




už podla toho ako to vyzerá myslím že tie kratšie verzie budú rýchlejšie, ale to neviem na 100% iba si to myslím.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: