質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

8321閲覧

WebSocketの送受信で複数のメッセージをサーバ側で受け取りたい

AmatsukiUrato

総合スコア10

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/01/15 12:54

編集2017/01/17 04:42

JettyサーバでWebSocketをここ数日で使い始めた者です.

前提

WebSocket自体あまりまだ理解できていないため,まず以下の確認から.

サーバ側から送るメッセージを送る場合,送受信は

Java

1// サーバ側の処理 2session.getAsyncRemote().sendText("送りたいtextデータ");

JavaScript

1// クライアント側の処理 2var ws = new WebSocket("URI"); 3ws.onmessage = function(receive) { 4 var data = receive.data; 5 // 以下受け取った内容に対する処理 6}

となると思います.
また,JavaScript側からメッセージを送る場合は

JavaScript

1// クライアント側の処理 2var ws = new WebSocket("URI"); 3ws.send("送りたいtextデータ");

Java

1// サーバ側の処理 2@OnMessage 3public void hoge(String msg, Session s) { 4 // 以下送られてきたmsgに対する処理 5}

になると思います.そこで質問なのですが,

質問

複数のメッセージを別々で送りたい時,サーバやJavaScript側で複数のメソッドを用意して受け取ることは可能なのでしょうか?
以下がJS->サーバ間での期待している動作です.

JavaScript

1// クライアント側 2ws.send("名前"); 3ws.send("趣味");

Java

1// サーバ側 2@OnMessage 3public void hoge(String msg, Session s) { 4 String name = msg; 5 // 名前に対する処理 6} 7 8@OnMessage 9public void huga(String msg, Session s) { 10 String hobby = msg; 11 // 趣味に対する処理 12}

上記の例の場合はws.send("名前,趣味")でデータを送り,サーバ側でSplit()による分割をすればいいということは理解しています.
初歩的な質問で申し訳ありませんが,よろしければ回答よろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ユーザーメッセージは、基本的にmessage(onmessage)イベントで扱う必要があります。
そこで、さらに別のイベントを発火して伝えれば、それっぽく見えると思いますが。

投稿2017/01/17 06:13

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AmatsukiUrato

2017/01/20 09:48 編集

回答ありがとうございます.WebSocketの情報自体があまり多くないため助かりました. ということは複数のデータかつ複数の処理を行いたい場合,私のサンプルプログラムで例えると // クライアント側(JavaScript) ws.send("名前,趣味"); // サーバ側(Java) @OnMessage public void hoge(String msg, Session s) { String[] msgs = msg.split(",", 0); if(msgs[0].equals("名前")) { // 名前が送られてきたときの処理 foo(msgs[0]); } else if (msgs[1].equals("趣味")) { // 趣味が送られてきたときの処理 bar(msgs[1]); } } のように送られてきたデータの内容を見て判別するか, // クライアント側(JavaScript) ws.send("foo,名前"); ws.send("bar,趣味"); // サーバ側(Java) @OnMessage public void hoge(String msg, Session s) { String[] msgs = msg.split(",", 0); if(msgs[0].equals("foo")) { // 名前が送られてきたときの処理 foo(msgs[1]); } else if (msgs[0].equals("bar")) { // 趣味が送られてきたときの処理 bar(msgs[1]); } } のように判別するためのメッセージ枠を用意しておき,そのメッセージにより判別するということですね.
t_obara

2017/01/17 23:39

はい、そうです。 ちなみに、処理ハンドリング方法としては、以下のようにする方法もあります。 http://stabucky.com/wp/archives/4466 さらに、送信データをjsonやxmlにしてよりvalidateしやすくする方法もあるかと思います。
AmatsukiUrato

2017/01/20 09:45

ご丁寧な返答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問