使用参数将websocket消息发送到客户端

时间:2014-02-27 15:16:15

标签: javascript python websocket tornado

有没有办法用参数发送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 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); 
}   

这是绑定的,可以将任何消息发送到div“output”。

我应该覆盖write_message函数吗?应该怎么样?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

如果要发送参数,只需将消息作为JSON字符串发送即可。这是通过websockets实现的方法。

在您的javascript中,您可以发送类似

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

并收到类似的JSON字符串

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
}

实际上,我认为一个好的做法是在使用websocket时仅使用JSON(或XML)进行通信。这样你的应用程序将更加连贯。

使用JSON还可以向客户端发送结构化消息。肯定有一个用于服务器端语言的JSON库。

抱歉,我对服务器端脚本无能为力,因为我不知道龙卷风,几乎没有python,但tornado write a Jsonp object应该有所帮助。

答案 1 :(得分:0)

所以,我会将它修复为JSON,但现在我正在发送来自网站的信件:

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

并且在服务器端正在等待JSON对象:

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

根据情况,我发回客户端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); 
}   

第二个功能是showServerResponse2(txt)将其发送到'output2'

这样,您可以将消息从服​​务器发送到客户端到不同的div,具体取决于发送的参数,这是原始问题。问题是建议用正确的参数发送每条消息,否则可能会丢失。