[英]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.