2016-11-19 3 views
0

socket.io을 사용하는 자바 스크립트 소켓 응용 프로그램을 구축 중이며 네트워크 프로그래밍에 익숙하지 않습니다. 네트워크에서 데이터를 전달하는 가장 좋은 방법은 무엇인지 모르겠습니다. 나는 바이너리 데이터를 전달하는 것이 가장 효율적인 방법이라는 것을 이해하지만 그것은 더 복잡하다. 그래서 저는 지금 당장은 평범한 물건으로 시작하고 싶습니다.자바 스크립트 소켓에서 JSON.stringify 객체와 일반 객체를 보내는 것의 차이점은 무엇입니까?

방금 ​​전에 socket.emit('message', obj)을 사용한 채팅 응용 프로그램을 만들었으므로 완벽하게 작동합니다. 그러나 나는 socket.emit('message', JSON.stringify(obj))을 사용하여 데이터를 전달하는 몇 가지 예를 보았습니다. 이점이 무엇인지 확실하지 않습니다. 네트워크에서 전달되는 데이터의 크기가 더 작아 집니까? 평범한 물건보다 효과적입니까?

+0

'obj'란 무엇입니까? 그것이 전선을지나 가기 전에, 어떤 것으로 연재되어야합니다. 어쩌면 socket.io가 당신을 위해 이것을 할 것입니다. – Thilo

+0

그것은'emit'이 이미 당신을 위해 이것을하고있는 것처럼 보입니다 : http://stackoverflow.com/questions/11805130/socket-io-how-to-send-javascript-object (반면에'send'는 당신이 데이터). – Thilo

+0

@Thilo'obj'는 일반 객체입니다. – newguy

답변

0

기본적으로 socket.io will call stringify이므로 수동으로하는 것이 무의미합니다.

대부분의 경우 단순한 socket.emit('message', obj)을 사용합니다. emit binary을 원한다고해도 그렇게됩니다. 그것은 단지 "효과가있는 것 같습니다."그것에 관한 많은 문서가 없습니다. 기본적으로, hasBin -check를 전달하는 뭔가를 방출해야합니다. Buffer, ArrayBuffer, Blob or File이어야합니다.

이유는 Node.js API에 Buffer.fromObject -method가 없습니다. Object을 바이너리로 보내려면 바이너리 데이터로 표현하는 방법을 고안해야합니다. 좋은 생각인지 아닌지는 당신이 다루는 데이터의 종류에 달려 있습니다. 데이터가 대부분 문자열 인 경우 많은 부분을 shim 할 수 없습니다. 정수, 숫자, 부울 등이 많은 경우에는 이진법을 사용하는 것이 좋겠지 만 효율적인 이진 형식을 설계하는 데는 약간의 추가 작업이 필요합니다.

또한 BSON이라는 형식이 있습니다. 브라우저 구현도 있으므로 기술적으로 임의의 자바 스크립트 ObjectBuffer으로 직렬화하고 socket.io를 사용하여 전송 한 다음 브라우저에서 역 직렬화 할 수 있어야합니다. 나는 브라우저 환경에서 이것을 사용 해본 적이 없다. 흥미로운 생각이지만, 성능 테스트가 필요하다.

+0

감사합니다. 매우 유익하고 매우 완벽한 대답입니다. – newguy

0

당신이 .emit() socket.io의 데이터 paramater로 객체를 전달하면, 자동으로 발신자 끝에서 JSON.stringify()를 호출하고 automaticlly 찾을 수신 측에서 JSON.parse()를 호출합니다.

그래서 객체를 전달하면 수신기가 객체를 다시 가져오고 socket.io가 자동으로 모든 것을 처리합니다.

내가 아는 한, socket.emit('message', JSON.stringify(obj))에게 전화하는 것은 장점이 없습니다. 그냥 socket.emit('message', obj)을 사용하십시오. 더 작거나 빠르지 않거나 더 효율적이지는 않습니다.