2013-07-09 2 views
1

게임 결과 데이터를 바이너리로 보내고 싶습니다. 효율성을 위해 부분적으로 13 바이트 대신 6 바이트를 전송합니다. 전송할 데이터의 양을 반으로 줄이는 것보다 많으며,이 중 몇 백 개가 될 수 있습니다 결과는 막대한 비용 절감), 부분적으로 난독 화 (네트워크 활동을 모니터링하는 사람들은 구별 가능한 데이터 대신 겉으로보기에 임의의 바이트를 보게됩니다).XMLHttpRequest에서 어떤 문자가 안전합니까?

내 "코드"다음 (사용하지 않을 아직, 단지 프로토 타입)대로 :

String.fromCharCode.apply(null,somevar.toString(16).split(/(?=(?:..)+$)/).map(function(a) {return parseInt(a,16);})) 

이 바이너리 문자열 값으로 임의의 정수 값을 변환합니다.

그러나 AJAX와 이진 데이터는 섞이지 않습니다. 어떤 범위의 값을 사용하는 것이 안전한지 알고 싶습니다. 32-255의 범위를 고수해야합니까, 아니면 더 안전하게 가서 32-127을 고수해야합니까? 32-255의 경우 위의 코드에서 15를 기본으로 사용하고 모든 숫자에 32를 더할 수 있으므로 저에게 효과적입니다.

하지만 실제로 문자 범위 문제에 관심이 많습니다. 그리고 Canvas를 지원하는 여러 브라우저 (크로스 브라우저)에서 바이너리 데이터를 전송하는 방법이 있다면?

+1

[사양] (http://www.w3.org/TR/XMLHttpRequest/#the-send() -method)에서는 문자열을 유니 코드로 변환 한 다음 UTF-8로 인코딩해야한다고 말합니다. 유일한 "원시"컨테이너는 모든 브라우저에서 지원되지 않는'ArrayBuffer'입니다. – Blender

+0

'Blob' (파일)을 보낼 수있는 것과 같이 [send] (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#send())'ArrayBuffer'가 가능합니다 – Bergi

답변

0

AJAX와 이진 데이터는 서로 충돌하지 않습니다. AJAX 호출을하면 데이터가 양식 데이터로 게시됩니다. 양식 데이터를 게시 할 때 일반적으로 양식 데이터를 application/x-www-form-url-encode 형식으로 인코딩합니다. 인코딩 된 데이터에는 문자/숫자 및 특정 특수 문자 만 포함됩니다. 예를 들어, 공백은 % 20 (으)로 인코딩됩니다. 이러한 이유로 "정상적인"문자를 바이너리로 변환하더라도 모든 공간을 절약 할 수는 없습니다. 결국 결국 모든 것을 다시 인코딩해야하기 때문입니다.

+0

비록 내 호기심에서 JSON.stringify가 제대로 처리 할 수 ​​있을까요? –

+0

"이진 데이터"는 * 가능한 모든 문자를 포함합니다. – JayC

관련 문제