gpt4 book ai didi

ruby - 如何使用 web-socket 以某种格式(JSON/XML/等)从服务器向客户端发送数据

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:34 27 4
gpt4 key购买 nike

根据 em-websocket gem 中的示例,我刚刚创建了使用 Sinatra 框架运行的简单回显服务器。问题是我不明白如何使用某种格式而不是纯文本来发送消息。目前,代码如下所示:

EventMachine::WebSocket.start(host: '0.0.0.0', port: 8080, debug: true) do |ws|
ws.onmessage { |msg|
ws.send msg
}
...
}

我想以某种格式发送消息,例如哈希:

ws.onmessage { |msg|
hash_message = {}
hash_message[:time] = Time.now.strftime("%T")
hash_message[:text] = msg
ws.send hash_message
}

在客户端,使用它来构建带有时间和文本 div 的漂亮消息框(时间只是本例中的示例)。例如,使用

  ws.onmessage = (evt) ->
write_message(evt.data.time,
evt.data.text)

代替

  ws.onmessage = (evt) ->
write_message evt.data

最佳答案

这很简单。在客户端生成 json 字符串:

send_message = (text) ->
ws.send JSON.stringify({event:"user_message", data: {text: text}})

在服务器上解析此字符串,并将其发送回客户端(增加时间):

EventMachine::WebSocket.start(host: '0.0.0.0', port: 8080, debug: true) do |ws|
ws.onmessage { |msg|
msg = JSON.parse(msg)

ws.send JSON.generate({
time: Time.now.strftime("%T"),
text: msg["data"]["text"]
})
}
...
end

并在客户端收到消息后显示此消息

window.onload = -> 
ws.onmessage = (evt) ->
data = JSON.parse(evt.data)
write_message(data.time,
data.text)

关于ruby - 如何使用 web-socket 以某种格式(JSON/XML/等)从服务器向客户端发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9148269/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com