Skip to content

Instantly share code, notes, and snippets.

@blewa
Created October 5, 2015 16:18
Show Gist options
  • Select an option

  • Save blewa/0859a1d5fcc31e6ab7e0 to your computer and use it in GitHub Desktop.

Select an option

Save blewa/0859a1d5fcc31e6ab7e0 to your computer and use it in GitHub Desktop.
EventMachine WS Crash
<!DOCTYPE html>
<html lang="en">
<body>
<script>
// websocket setup
var websocket = new WebSocket('ws://localhost:8123');
// var websocket = new WebSocket('ws://' + window.location.hostname + ':8080');
websocket.onmessage = function(msg) {
console.log('got a moo');
};
</script>
</body>
</html>
require 'em-websocket'
require 'thread'
EventMachine.run {
@channel = EM::Channel.new
Thread.new {
loop do
@channel.push("moo")
puts "pushed a moo"
sleep 1
end
}
EventMachine::WebSocket.start(:host => '0.0.0.0', :port => 8123, :debug => true) do |ws|
ws.onopen {
sub = @channel.subscribe { |msg| ws.send msg }
}
ws.onclose { puts "Connection closed" }
end
}
@blewa

blewa commented Oct 5, 2015

Copy link
Copy Markdown
Author
$ ruby ws-test.rb 
pushed a moo
pushed a moo
pushed a moo
[[:initialize]]

[[:receive_data,
  "GET / HTTP/1.1\r\nHost: localhost:8123\r\nConnection: Upgrade\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nUpgrade: websocket\r\nOrigin: null\r\nSec-WebSocket-Version: 13\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-US,en;q=0.8\r\nSec-WebSocket-Key: jLvwTKvcXP6tgfyu6p7gyw==\r\nSec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n\r\n"]]

[[:accepting_ws_version, 13]]

[[:upgrade_response,
  "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ADiwWJn7rRyCSw4ZlPdgvb9Fp/M=\r\n\r\n"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

[[:receive_data, "\x88\x82\xCE\x85t\r\xCDl"]]

[[:message_received, :close, "\x03\xE9"]]

[[:close_frame_received, 1001, ""]]

[[:sending_frame, :close, "\x03\xE9"]]

pushed a moo
[[:unbind, :connection]]

Connection closed
[[:sending_frame, :text, "moo"]]

com/rubyeventmachine/EmReactor.java:434:in `sendData': java.lang.NullPointerException
    from com/rubyeventmachine/EmReactor.java:438:in `sendData'
    from java/lang/reflect/Method.java:497:in `invoke'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:127:in `send_data'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/em/connection.rb:328:in `send_data'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:151:in `send_frame'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:155:in `send_text_frame'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/em-websocket-0.5.1/lib/em-websocket/connection.rb:167:in `send_text'
    from ws-test.rb:17:in `block in ws-test.rb'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `block in push'
    from org/jruby/RubyArray.java:1560:in `each'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `block in push'
    from org/jruby/RubyArray.java:1560:in `each'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `block in push'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:250:in `block in schedule'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:959:in `block in run_deferred_callbacks'
    from org/jruby/RubyFixnum.java:304:in `times'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:956:in `run_deferred_callbacks'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:1486:in `event_callback'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:92:in `eventCallback'
    from com/rubyeventmachine/EmReactor.java:89:in `eventCallback'
    from java/lang/reflect/Method.java:497:in `invoke'
    from com/rubyeventmachine/EmReactor.java:349:in `runLoopbreaks'
    from com/rubyeventmachine/EmReactor.java:102:in `run'
    from java/lang/reflect/Method.java:497:in `invoke'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:111:in `run_machine'
    from /home/ablew/.rvm/gems/jruby-9.0.1.0@transactionmap/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:187:in `run'
    from ws-test.rb:4:in `<top>'
    from java/lang/invoke/MethodHandle.java:625:in `invokeWithArguments'

@blewa

blewa commented Oct 5, 2015

Copy link
Copy Markdown
Author

Output from jruby 1.7.22:

$ ruby ws-test.rb 
pushed a moo
pushed a moo
[[:initialize]]

[[:receive_data,
  "GET / HTTP/1.1\r\nHost: localhost:8123\r\nConnection: Upgrade\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nUpgrade: websocket\r\nOrigin: null\r\nSec-WebSocket-Version: 13\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-US,en;q=0.8\r\nSec-WebSocket-Key: VN6hf2x5EdjPeBSICmmlsg==\r\nSec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n\r\n"]]

[[:accepting_ws_version, 13]]

[[:upgrade_response,
  "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: M4uCr0j0bsBwwR70QhvhhYSf2rI=\r\n\r\n"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

pushed a moo
[[:sending_frame, :text, "moo"]]

[[:receive_data, "\x88\x82Q\xC3\x14\xD7R*"]]

[[:message_received, :close, "\x03\xE9"]]

[[:close_frame_received, 1001, ""]]

[[:sending_frame, :close, "\x03\xE9"]]

[[:unbind, :connection]]

Connection closed
pushed a moo
[[:sending_frame, :text, "moo"]]

com/rubyeventmachine/EmReactor.java:434:in `sendData': java.lang.NullPointerException
    from com/rubyeventmachine/EmReactor.java:438:in `sendData'
    from java/lang/reflect/Method.java:497:in `invoke'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:127:in `send_data'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:127:in `send_data'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:127:in `send_data'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:127:in `send_data'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/connection.rb:328:in `send_data'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/connection.rb:328:in `send_data'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/connection.rb:328:in `send_data'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/connection.rb:328:in `send_data'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:151:in `send_frame'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:151:in `send_frame'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:151:in `send_frame'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:151:in `send_frame'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:155:in `send_text_frame'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:155:in `send_text_frame'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:155:in `send_text_frame'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/framing07.rb:155:in `send_text_frame'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/connection.rb:167:in `send_text'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/connection.rb:167:in `send_text'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/connection.rb:167:in `send_text'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/em-websocket-0.5.1/lib/em-websocket/connection.rb:167:in `send_text'
    from ws-test.rb:17:in `(root)'
    from ws-test.rb:17:in `(root)'
    from ws-test.rb:17:in `(root)'
    from ws-test.rb:17:in `(root)'
    from ws-test.rb:17:in `(root)'
    from ws-test.rb:17:in `(root)'
    from ws-test.rb:17:in `(root)'
    from ws-test.rb:17:in `(root)'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from org/jruby/RubyArray.java:1613:in `each'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from org/jruby/RubyArray.java:1613:in `each'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/em/channel.rb:43:in `push'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:250:in `schedule'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:250:in `schedule'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:250:in `schedule'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:250:in `schedule'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:959:in `run_deferred_callbacks'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:959:in `run_deferred_callbacks'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:959:in `run_deferred_callbacks'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:959:in `run_deferred_callbacks'
    from org/jruby/RubyFixnum.java:280:in `times'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:956:in `run_deferred_callbacks'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:956:in `run_deferred_callbacks'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:956:in `run_deferred_callbacks'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:956:in `run_deferred_callbacks'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:1486:in `event_callback'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:1486:in `event_callback'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:1486:in `event_callback'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:1486:in `event_callback'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:92:in `eventCallback'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:92:in `eventCallback'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:92:in `eventCallback'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:92:in `eventCallback'
    from com/rubyeventmachine/EmReactor.java:89:in `eventCallback'
    from java/lang/reflect/Method.java:497:in `invoke'
    from com/rubyeventmachine/EmReactor.java:349:in `runLoopbreaks'
    from com/rubyeventmachine/EmReactor.java:102:in `run'
    from java/lang/reflect/Method.java:497:in `invoke'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:111:in `run_machine'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:111:in `run_machine'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:111:in `run_machine'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/jeventmachine.rb:111:in `run_machine'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:187:in `run'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:187:in `run'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:187:in `run'
    from /home/ablew/.rvm/gems/jruby-1.7.22@transaction_map/gems/eventmachine-1.0.3-java/lib/eventmachine.rb:187:in `run'
    from ws-test.rb:4:in `(root)'
    from ws-test.rb:4:in `(root)'
    from ws-test.rb:4:in `(root)'
    from ws-test.rb:4:in `(root)'
    from ws-test.rb:4:in `(root)'
    from ws-test.rb:4:in `(root)'
    from ws-test.rb:4:in `(root)'
    from ws-test.rb:4:in `(root)'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment