2012-10-04 11 views
5

Im tworząc 8 bit unsigned javascript tablicę:JavaScript wpisane tablic "na drucie"

var myArray = Uint8Array(64); 

Manipulowanie tej tablicy zarówno klienta, jak i serwera, a następnie wysłanie go na socket.io połączenia. Piszemy grę, więc dane przesyłane przez kabel są tak małe, jak to tylko możliwe. w jaki sposób socket.io nie obsługuje wysyłania danych binarnych czy warto martwić się tablicami wpisanymi w javascript, czy też powinniśmy używać zwykłych tablic javascript? czy nadal będą mniejsze niż natywna tablica js?

+0

Zależy to od tego, jakiej biblioteki bibliotecznej/protokołu RPC używasz do wysyłania danych przez sieć. – millimoose

Odpowiedz

6

UWAGA: Zakładam, że klient ma na myśli przeglądarkę. W innym przypadku, proszę wyjaśnić więcej szczegółów.

Socket.io nie obsługuje danych binarnych, głównie dlatego, że oferuje różne transporty, a wiele z nich ich nie obsługuje.

Jednak natywne strony internetowe obsługują bloki i tablice znaków.

Jeśli naprawdę chcesz korzystać z danych binarnych dla wydajności (co, zgadzam się, jest sposobem, aby przejść w twoim przypadku), myślę, że powinieneś rozważyć użycie websockets zamiast socket.io.

Zła:

  • tylko ~ 55% użytkowników przeglądania stron internetowych za pomocą przeglądarki, która obsługuje WebSockets.
  • Nie będziesz mieć oferty produktów socket.io, takich jak kanały, emitowanie i metody.

Dobre: ​​

  • Web Sockets API jest bardzo proste.

  • Będzie to o wiele bardziej wydajne pamięci. Normalnie twoje normalne tablice są przenoszone, najpierw robiąc je ciągiem JSON, a następnie wysyłając je z powrotem. Oznacza to, że faktycznie wysyłasz ciąg znaków do swojej tablicy! Zamiast tego, wyślesz ilość bajtów, których możesz się spodziewać (w bardziej przewidywalny sposób, bez sprawdzania długości łańcuchów przed wysłaniem, ale w bardziej "protokole" - w razie potrzeby).

Jeśli zdecydujesz się korzystać z WS, można to sprawdzić: http://www.adobe.com/devnet/html5/articles/real-time-data-exchange-in-html5-with-websockets.html

Else można po prostu iść z JSON.

Prawdę mówiąc, jeśli nadal używasz JSON do obsługi socket.io i "universal", włącz także transport flash i wyłącz wolniejsze transporty, jeśli gra wymaga małego opóźnienia.

+0

Oto co wymyśliłem. Chociaż jesteśmy w stanie uczynić sprawy bardziej przejrzystymi. Gra jest szachy ... Prędkość nie jest więc taka ważna, ale piszę grę, aby nauczyć się nie pisać gry. Staram się być jak najbardziej efektywny. Teraz i tak jestem zbyt daleko w drodze do socket.io. Dodatkowo, jak zauważyłeś, dodaje wiele przydatnych funkcji na wyższym poziomie. – AndrewMcLagan

+0

Zastanawiam się, używając tablicy typów JS Nawet BEZ gniazd binarnych pozwoli zaoszczędzić miejsce, choć tylko niewielką ilość. Reprezentuję szachownicę z Uint8Array (64), ponieważ na planszy jest 64 pól. Istnieje tylko 12 możliwych rodzajów elementów, więc reprezentuję je od 1 do 12 i umieszczam je w tablicy tablic.Następnie na serwerze i kliencie znajduje się obiekt pieceMap, który łączy kod części z nazwą tego elementu. na przykład {1: 'BlackKnight', 2: 'WhiteKnight'} – AndrewMcLagan

+1

Nie zaoszczędzi ci miejsca w porównaniu do normalnej tablicy. Po wysłaniu na serwer nadal będzie to wykonywane przy użyciu JSON, a zatem zostanie przetłumaczone na ciąg znaków. – Mamsaac

Powiązane problemy