2012-10-04 3 views
5

임 "와이어를 통해"배열을 입력 :자바 스크립트는 8 비트 부호 자바 스크립트 배열을 생성

var myArray = Uint8Array(64); 

클라이언트와 서버 모두에서이 배열을 조작, 다음 socket.io 연결을 통해 전송하기. 우리는 게임을 작성하여 데이터가 가능한 한 작게 전 송됩니다. socket.io는 바이너리 데이터를 전송하는 것을 지원하지 않기 때문에 자바 스크립트 형식의 배열로 귀찮게 여길 가치가 있습니까? 아니면 그냥 일반적인 자바 스크립트 배열을 사용해야하나요? 그들은 여전히 ​​기본 js 배열보다 작을 것입니까?

+0

이것은 네트워크를 통해 데이터를 보내는 데 사용하는 직렬화 라이브러리/RPC 프로토콜에 따라 달라집니다. – millimoose

답변

6

참고 : 클라이언트가 브라우저를 의미한다고 가정합니다. 그렇지 않으면 자세한 내용을 명확히하십시오.

Socket.io는 이진 데이터를 지원하지 않습니다. 주로 전송 속도가 다르기 때문에 Socket.io는 지원하지 않습니다.

그러나 네이티브 웹 소켓은 Blob 및 ArrayBuffers를 지원합니다.

효율성을 위해 이진 데이터로 가고 싶다면 (내가 동의하는 것은 당신의 경우에 들어가는 방법이다), 나는 socket.io 대신에 웹 소켓을 사용하는 것을 고려해야한다고 생각한다.

나쁜 :

  • 만 ~ 사용자의 55 %가 WebSocket을 지원하는 브라우저로 웹을 검색합니다.
  • channels, emit 및 on 메소드와 같은 상품 socket.io는 제공하지 않습니다.

좋은 :

  • 웹 소켓 API는 매우 간단합니다.

  • 훨씬 더 효율적인 메모리가 될 것입니다. 일반적으로 일반 배열은 먼저 JSON 문자열을 만든 다음 다시 전송하여 전송됩니다. 즉, 실제로 배열의 문자열 표현을 보내는 것입니다! 대신, 예상 할 수있는 바이트의 양을 보낼 수 있습니다 (전송하기 전에 문자열 길이를 확인하지 않고보다 예측 가능한 방식으로,보다 원할 경우 "프로토콜"방식으로). 당신이 WS를 사용하기로 결정한 경우

, 당신은이를 확인할 수 있습니다 : 그렇지 http://www.adobe.com/devnet/html5/articles/real-time-data-exchange-in-html5-with-websockets.html

그냥 JSON으로 갈 수 있습니다.

진실을 말하자면, 여전히 socket.io와 "universal"지원을 위해 JSON을 사용하고, 플래시 전송을 활성화하고, 게임의 대기 시간이 짧으면 느린 전송을 비활성화하십시오.

+0

이것은 내가 생각한 것입니다. 우리가 일을 더 분명하게 할 수는 있지만. 게임은 체스입니다. 그래서 속도는 중요하지 않지만, 게임을 쓰지 않는 것을 배우기 위해 게임을 쓰고 있습니다. 그래서 저는 가능한 한 효율적으로 노력하고 있습니다. 어쨌든 지금은 socket.io 도로에서 너무 멀리 떨어져 있습니다. 게다가 당신이 지적한대로, 더 높은 수준의 기능성을 추가합니다. – AndrewMcLagan

+0

JS 형식의 배열을 사용하고 있다고 생각합니다. 바이너리 소켓을 사용하지 않아도 소량이지만 공간을 절약 할 수 있습니다. 보드에 64 개의 사각형이 있으므로 Uint8Array (64)를 사용하여 체스 보드를 대표합니다. 12 가지 유형의 조각 만 가능하므로 1 - 12에서 표현하고 보드 배열에 배치하십시오.그런 다음 서버와 클라이언트에는 해당 조각의 이름과 조각 코드를 연결시키는 pieceMap 개체가 있습니다. 예 : {1 : 'BlackKnight', 2 : 'WhiteKnight'} – AndrewMcLagan

+1

일반 배열에 비해 공간이 절약되지 않습니다. 서버로 보내면 JSON을 사용하여 계속 수행되므로 문자열로 변환됩니다. – Mamsaac