3

gemの例に従ってem-websocket、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
4

1 に答える 1

2

かなり簡単でした。クライアント側で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)
于 2012-02-05T16:12:14.107 に答える