通过以下em-websocket
-gem中的示例,我刚刚创建了一个使用Sinatra框架运行的简单echo服务器。问题是我不明白如何使用某种格式而不是纯文本发送消息。目前,代码看起来像:
EventMachine::WebSocket.start(host: '0.0.0.0', port: 8080, debug: true) do |ws|
ws.onmessage { |msg|
ws.send msg
}
...
}
我想以某种格式发送消息,比如Hash:
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)