現在チャット機能を作っております。Websocketを通してサーバと接続する箇所を実装しました。しかしwebsocket-railsとサーバとの接続の際に Error during WebSocket handshake Invalid status lineという内容のエラーが出てしまい困っております。websocket-railsに関する記事を元にテストとして動かそうと思ったのですが、うまくいきません。どのようにしたらこのエラーを解消できるか教えてください。
参考にしたサイト:
http://www.school.ctc-g.co.jp/columns/masuidrive/masuidrive14.html
http://takuyanz.hatenablog.com/
環境:localのdevelop
サーバ:webrick(port:3000) redis(port:6379)
言語:Ruby 2.2.3p173(フレームワーク Rails(4.2.1))
使用gem:websocket-rails
ブラウザ:chrome
実行内容:
webrickサーバ起動
rails s
Started GET "/chatRoom" for 127.0.0.1 at 2015-12-23 ・・・
redis起動
redis-server /usr/local/etc/redis.conf
74440:M 23 Dec 11:49:39.638 # Server started, Redis version 3.0.5 74440:M 23 Dec 11:49:39.638 * DB loaded from disk: 0.000 seconds 74440:M 23 Dec 11:49:39.638 * The server is now ready to accept connections on port 6379
実行結果
ページをロードするとブラウザのコンソールに以下のエラーが表示されます。
WebSocket connection to 'ws://localhost:6379/websocket' failed: Error during WebSocket handshake: Invalid status line
・General Request URL:ws://localhost:6379/websocket Request Method:GET Status Code:200 OK ・Request Headers Accept-Encoding:gzip, deflate, sdch Accept-Language:ja,en-US;q=0.8,en;q=0.6 Cache-Control:no-cache Connection:Upgrade Cookie:xxx_logined=2015-12-13+17%3A55%3A50+UTC; _websocketTest_session=・・・; _websocket-rails-demo_session=・・・; _message_session=・・・ Host:localhost:6379 Origin:http://localhost:3000 Pragma:no-cache Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits Sec-WebSocket-Key:/・・・ Sec-WebSocket-Version:13 Upgrade:websocket User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
ソースコード
Gemfile
ruby
1gem 'websocket-rails'
chat_controller.rb
ruby
1require 'redis' 2class ChatController < WebsocketRails::BaseController 3 4 def recieve_message 5 message = message() 6 broadcast_message :show_message, message 7 end 8 def initialize_session 9 logger.info("initialize chat controller") 10 @redis = Redis.new(:host => "127.0.0.1", :port => 6379) 11 controller_store[:redis] = @redis 12 end 13 14 def connect_user 15 logger.debug("connected user") 16 gid = session[:group_id] 17 talks = controller_store[:redis].lrange gid, 0,100 18 talks.each do |message| 19 msg = ActiveSupport::HashWithIndifferentAccess.new(eval(message)) 20 send_message :new_message, obj 21 end 22 end 23
show_chat_room.html.erb
html
1<div id="message_box"> 2 <p>broadcasting message</p> 3 <!-- message will be shown here --> 4</div> 5<input type="text" id="message_input"> 6<input type="button" id="send_message" value="send"> 7
javascript
1<script> 2 $(document).ready(function(e){ 3 var dispatcher = new WebSocketRails('localhost:6379/websocket'); 4 5 $(document).on("click", "#send_message", function(e){ 6 message_text = $("#message_input").val(); 7 dispatcher.trigger("send_message", message_text); 8 }); 9 10 dispatcher.bind("show_message", function(message){ 11 console.log(message); 12 $("#message_box").append("<p>" + message + "</p>"); 13 }); 14 }); 15</script>
events.rb
ruby
1WebsocketRails::EventMap.describe do 2 subscribe :send_message, :to => ChatController, :with_method => :recieve_message 3end 4
development.rb
ruby
1. 2. 3 config.middleware.delete Rack::Lock 4・ 5・

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/26 20:59 編集
2015/12/26 08:49
2015/12/26 09:16
2015/12/26 15:16
2015/12/26 15:26
2015/12/26 20:56
2015/12/26 20:58
2015/12/26 21:15 編集
2015/12/26 21:45
2015/12/26 22:06
2015/12/26 22:37
2015/12/27 00:08
2015/12/27 03:09