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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

WebSocket

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

JavaScript

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

Q&A

解決済

1回答

10595閲覧

【WebSocket】の接続は確認されているが、メッセージを送信するとエラーが出る

Sfidante

総合スコア90

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

WebSocket

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

JavaScript

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

1グッド

1クリップ

投稿2015/09/05 08:37

JavaScriptとJavaを用いてWebアプリを作成しているのですが、
WebSocketの通信のところでエラーが出て困っております。

OSはLinuxでApacheとTomcatを連携させております。
簡易なWebSocketでは通信が確認できたため、
JavaScriptのコードの間違いではないかと考えております。

JavaScriptのソースコードは以下のようになっております。

JavaScript

1var webSocket; 2window.onload = function() { 3 //アノテーションでwebsocketを指定 4 webSocket = new WebSocket("ws://FQDN:8080/アプリ名/websocket"); 5 var messageArea = document.getElementById("message-list"); 6 var sessionid = document.getElementById("sessionID").value; 7 var photo = document.getElementById("yourphoto").value; 8 var youruserid = document.getElementById("youruserid").value; 9 10 var appendMessage = function(value, session , yourid) { 11 var messageElement = document.createElement("message-list"); 12 var time = new Date(); 13 var month = time.getMonth() + 1; 14 if(month < 10) { month = "0" + month; } 15 var day = time.getDate(); 16 if(day < 10) { day = "0" + day; } 17 var hour = time.getHours(); 18 if(hour < 10) { hour = "0" + hour; } 19 var minute = time.getMinutes(); 20 if(minute < 10) { minute = "0" + minute; } 21 var now = month + "/" + day + " " + hour + ":" + minute; 22 if(youruserid == yourid && session != sessionid){ 23 messageElement.innerHTML = '<li class="msg_recieve"><a><img src="' + photo + '" alt="メッセージ相手写真" class="c-message_photo img-circle c-photo_mini"></a><div class="inner-box2"><p class="balloon_left">' + value + '</p></div></li><p class="time_recieve text10">' + now + '</p>'; 24 }else if(session == sessionid && youruserid != yourid){ 25 messageElement.innerHTML = '<li class="msg_send"><div class="inner-box"><p class="balloon_right" id="messageArea">' + value + '</p></div></li><p class="time_send text10">' + now + '</p>'; 26 } 27 messageArea.appendChild(messageElement); 28 var message_box = document.getElementById("message_box"); 29 message_box.scrollTop = message_box.scrollHeight; 30 } 31 webSocket.onopen = function() { 32 console.log("open") 33 } 34 webSocket.onclose = function() { 35 console.log("close") 36 } 37 webSocket.onmessage = function(message) { 38 var data = JSON.parse(message.data); 39 appendMessage(data.text, data.sessionid , data.youruserid); 40 } 41 42 var messageInput = document.getElementById("c-btn_chenge"); 43 var messageText = document.getElementById("messageInput"); 44 messageText.onkeypress = function(e) { 45 if (13 == e.keyCode) { 46 var message = messageText.value; 47 if (webSocket && "" != message) { 48 webSocket.send(message); 49 messageText.value = ""; 50 return false; 51 } 52 } 53 } 54 55 messageInput.onclick = function() { 56 var message = messageText.value; 57 if (webSocket && "" != message) { 58 webSocket.send(message); 59 messageText.value = ""; 60 } 61 } 62}

このページを表示した時はエラーは出ていないのですが、
何かしらのテキストを送信しようとするとエラーが出てしまいます。

Chromeのデベロッパーツールでエラー箇所を確認いたしますと、

Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.

のようなエラーが出ています。

また、https://www.websocket.org/echo.html
でブラウザの通信状態を確認いたしましたが、
接続は確立されておりました。

ソースコードにおかしな点がございましたらご教授お願い致します。
(色々突っ込みどころはあるコードだと思いますが・・・)

ご教授のほどよろしくお願いいたします。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

前回の続きであれば、

lang

1    webSocket = new WebSocket("ws://FQDN:8080/アプリ名/websocket"); 

wsでなくhttpで、:8080が不要と思います。

lang

1    webSocket = new WebSocket("http://FQDN/アプリ名/websocket"); 

投稿2015/09/05 09:05

eripong

総合スコア1546

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

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

Sfidante

2015/09/05 11:04 編集

ご回答ありがとうございます。 試してみたのですが、 HTTPのスキームでは対応していないらしく、 Uncaught SyntaxError: Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. 'http' is not allowed. といったエラーになってしまいました。
eripong

2015/09/05 11:19 編集

httpでなくwsにするとどうでしょうか?
eripong

2015/09/05 12:26 編集

少なくとも、8080は開いていないはずなので、 80番ポートにする事はあっていると思います。 Apacheでwsを受け取れるかを知らないので、 ちょっと調べてみます。
Sfidante

2015/09/05 12:25

すみません、色々調査していった結果、 やはり、ソースコードがおかしいのではなくて、 Tomcatの設定のようです。 ローカルでは問題なく接続できているので、 改めてTomcatの設定を見なおしてみます。 また、何かありましたらよろしくお願い致します。
eripong

2015/09/05 12:45

あれから設定を変えたのでなければ、 LBが8080ポートを受け付ける設定になっていないので、 Tomcatにも問題があるかも知れませんが、Tomcatだけ直しても、 動くようにはならないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問