2014-02-27 3 views
1

을 사용하여 websocket 메시지를 클라이언트에 보내면 매개 변수가있는 websocket 메시지를 보낼 수 있습니까? 웹 사이트에 메시지를 보내고 싶습니다. 웹 사이트에서 올바른 div로 리디렉션 할 수 있습니다.매개 변수

개념은 메시지 + id를 보내고 ID에 따라 메시지가 속한 곳으로 리디렉션합니다. id는 숫자 또는 문자 일 수 있습니다.

def on_message(self, message): 
    global c 
    if message == "w": 
    c = "8"; 
    if message == "s": 
    c = "2" 
    if c == '8' : 
    self.write_message("This should appear in first div ") 
    elif c == '2' : 
    self.write_message("This should appear in second div ") 

그리고 클라이언트 코드 : 이것은 "출력"div에 어떤 ​​메시지를 보낼 바인더 제본되어

<div id="output">First div</div> 
<div id="output2">Second div</div> 

socket.onmessage = function(msg) 
{ 
    showServerResponse(msg.data); 
} 
function showServerResponse(txt) 
{ 
    var p = document.createElement('p'); 
    p.innerHTML = txt; 
    document.getElementById('output').appendChild(p); 
} 

지금까지이 (간체) 내 일부 서버 코드입니다.

write_message 함수를 재정의해야합니까? 어떻게 생겼을 까?

어떤 조언을 주셔서 감사합니다.

답변

0

그래서, JSON에 수리하지만 지금은 웹 사이트에서 편지를 보내고있다 : JSON 객체 기다리고 있습니다

socket.send("w") 
socket.send("s") 

및 서버 측에서 :

forward = { "messageid": 1, 
     "message": "First message" 
     } 
backward = { "messageid": 2, 
     "message": "Second message" 
     } 

을 그리고 경우에 따라 I 클라이언트에 다시 전송 JSON :

def on_message(self, message): 
    global c 
    if message == "w": 
    c = "8"; 
    if message == "s": 
    c = "2" 
    if c == '8' : 
    self.write_message(json_encode(forward)) 
    elif c == '2' : 
    self.write_message(json_encode(backward)) 

브라우저에서 json을 기다리는 기능이 있습니다. 개체 :

<div id="output">First div</div> 
<div id="output2">Second div</div> 

socket.onmessage = function(msg){ 
var message = JSON.parse(msg.data); 
if(message.messageid== 1) 
    { 
    showServerResponse(message.message) 
    } 
if(message.messageid== 2) 
    { 
    showServerResponse2(message.message) 
    } 
} 

그리고 함수는 DIV에 표시합니다 :

function showServerResponse(txt) 
{ 
var p = document.createElement('p'); 
p.innerHTML = txt; 
document.getElementById('output').appendChild(p); 
} 

두 번째 기능은 'output2'로 전송 showServerResponse2(txt)입니다.

이렇게하면 전송 된 매개 변수에 따라 원래 질문이었던 서버에서 클라이언트로 메시지를 보낼 수 있습니다.문제는 올바른 매개 변수를 사용하여 모든 메시지를 보내거나 메시지가 손실 될 수 있다는 것입니다.

2

매개 변수를 보내려면 메시지를 JSON 문자열로 보내면됩니다. 이것이 웹 소켓을 통해 할 수있는 방법입니다. 자바 스크립트에서

당신이

socket.send(JSON.stringify({messageid : "your id", message : "your text message"}); 

같은 것을 보내 그리고 사실 그

socket.onmessage = function(data){ 
    var message = JSON.parse(data.data); 
    // now you have your JSON object in the var message 

    console.log(message); // outputs the object in the browser's console 
} 

같은 JSON 문자열을받을 수 있습니다, 나는 좋은 연습은 JSON (또는 XML)을 사용하여 통신하는 생각 websocket을 사용할 때. 이렇게하면 응용 프로그램의 일관성이 향상됩니다.

JSON을 사용하면 클라이언트에 구조화 된 메시지를 보낼 수도 있습니다. 서버 측 언어 용 JSON 라이브러리가 있어야합니다.

죄송합니다. 토네이도와 거의 파이썬을 모르지만 tornado write a Jsonp object 도와야하므로 미안하지만 서버 측 스크립트에 더 도움이되지 못합니다.

+0

좋은 아이디어, 지금 당장보고 있습니다. 그래서 .. JSON.parse를 사용하여 서버 측의 매개 변수에 액세스 할 수 있어야합니다. 맞습니까? 동일한 방식으로 JSON 데이터를 서버로 보낼 수 있습니까? – Zoidbergus

+0

서버에서 파이썬 JSON 라이브러리에서 제공하는 함수를 사용하여 JSON을 구문 분석해야합니다.이 라이브러리는'from tornado.escape import json_decode'와 유사하며'json_decode (data_received) '를 사용할 수 있습니다. 정확한 방법을 찾기 위해 조사를 해보십시오. 지금 당장 추측하고 있습니다. – Johnride

+0

안내를 주셔서 감사합니다. 해결책으로 답을 쓸 것입니다. – Zoidbergus