繁体   English   中英

使用参数向客户端发送Websocket消息

[英]Sending websocket message to client with parameter

有没有办法发送带有参数的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“输出”。

我应该重写write_message函数吗? 看起来怎么样?

感谢您的任何建议。

如果要发送参数,只需将消息作为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,但是龙卷风编写一个Jsonp对象应该会有所帮助。

因此,我将其修复为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。 事情是建议发送带有正确参数的每条消息,否则可能会丢失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM