websocket-client-simple (http://shokai.org/blog/archives/7223) を使いwebsocket経由でデータを連続的に受け取っています。
Threadの中でwebsocketを動かし、メインスレットの方でsleep(30)の後に、**Thread.kill($wbsockets)**でそのスレッドを停止させたあとも、websocketの通信は続いているようです。
なぜスレッドを停止させたあとも、websocketは通信を続けているのでしょうか?
30秒後にwebsocket通信をストップさせるにはどうしたら良いでしょうか?
次のようなコードを動かしていますが、**Thread.kill($wbsockets)**もデータを取得し続けるのがわかると思います。
ruby
1$file = Hash.new 2$wbsockets = Thread.new do 3 4 $ws = WebSocket::Client::Simple.connect 'wss://www.bitmex.com/realtime' 5 6 $ws.on :open do 7 json = JSON.generate({:op => "subscribe", :args => "orderBook10:XBTUSD"}) 8 $ws.send(json) 9 end 10 11 $ws.on :message do |msg| 12 data = JSON.parse(msg.data) 13 now = Time.now.to_f 14 $file[Time.parse(data["data"][0]["timestamp"]).to_i] = (data["data"][0]["bids"][0][0]+ data["data"][0]["asks"][0][0])/2 15 $file.delete_if {|k,v| k < now - 60} 16 17 print $file.size 18 print "," 19 end 20 21 $ws.on :close do |e| 22 p e 23 end 24 25 $ws.on :error do |e| 26 p e 27 end 28 29 end 30 31 32sleep(30) 33 34Thread.kill($wbsockets) 35 36loop{ 37#別の処理 38}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/24 04:47