有没有办法用参数发送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函数吗?应该怎么样?
感谢您的任何建议。
答案 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,具体取决于发送的参数,这是原始问题。问题是建议用正确的参数发送每条消息,否则可能会丢失。