2012-08-04 2 views
20

Socket.io과 함께 JavaScript 객체를 서버에서 클라이언트로 보내는 방법은 무엇입니까? Socket.io를 WebSocket으로 사용하고 있습니다 (.send()와 함께 보내고 message 이벤트로 수신). I는 서버 측에서 같은 것을 할 노력하고있어 경우 : 클라이언트 측에 내가 갖는Socket.io JavaScript 객체를 보내는 방법

var myObject = { 
    message: 'Hello World!' 
} 

socket.send(myObject); 

만이 String : [object Object]

답변

35

당신은 실제로 대신 이벤트를 방출해야합니다

socket.emit('yourEvent', myObject); 

.send()을 사용하는 경우 문제가 발생하는 곳인 객체의 문자열 표현을 보내기 만하면됩니다. .send()을 사용할 수는 있지만 객체를 먼저 JSON 인코딩해야하고 수신시 디코딩해야합니다.

특별한 이유가있는 경우가 아니면 표준 Socket.IO .emit() 방법을 사용하는 것이 가장 좋습니다. 그것이 바로 그 때문입니다.

4

socket.send() 개체를 이해하지 못하는데 JSON을 사용합니다. 이 방법을 사용할 수 있습니다

socket.send(JSON.stringify(myObject)); 

을 그리고 Object로 JSON을 구문 분석 JSON.parse(json)를 사용합니다.

9

이전 예제를 사용하여이 문제를 만났습니다. 여기에 내가 찾은 대답이 있습니다 : Migrating 0.6 to 0.7+, 나는 그것을 재현합니다. v0.6에서


, socket.send 자동으로 JSON에 {a: 'b'} 같은 개체를 변환합니다. 다음을 사용하여 클라이언트에 데이터를 보냅니다.

socket.send({a: 'b'}); 

이것은 멋지지만 근본적인 문제를 야기합니다. JSON은 객체뿐만 아니라 문자열, 숫자 등을 인코딩합니다! 따라서 JSON을 전달하려는 명시 적으로 명시하면 API가 더 명확합니다 (JSON 인코딩/디코딩과 관련된 성능 저하가 있으므로). 당신은 또한 방출하고 브라우저와 서버 사이의 사용자 정의 이벤트를 수신 할 수있는 지금

socket.json.send({a: 'b'}); 

: 이벤트에 대한

socket.emit('my_event', {a: 'b'}); 

인수 JSON으로 인코딩 취득을

v0.7에서

json 플래그를 사용 자동으로 당신을 위해. 서버 측

socket.json.send({ your : 'data' });

에서이를 사용하여

4

시도하고 클라이언트 측에 JSON.parse() 방법.

+0

내 안드로이드 클라이언트, 건배에 보낼 때 나를 위해 매력처럼 작동합니다! – Jack

관련 문제