Class: WEBrick::Websocket::HTTPServer
- Inherits:
-
HTTPServer
- Object
- HTTPServer
- WEBrick::Websocket::HTTPServer
- Defined in:
- lib/webrick/websocket/server.rb
Overview
A HTTP Server with Websocket Support
Instance Method Summary collapse
-
#initialize(*args, &block) ⇒ HTTPServer
constructor
A new instance of HTTPServer.
-
#service(req, res) ⇒ Object
:nodoc:.
Constructor Details
#initialize(*args, &block) ⇒ HTTPServer
Returns a new instance of HTTPServer.
10 11 12 |
# File 'lib/webrick/websocket/server.rb', line 10 def initialize(*args, &block) super(*args, &block) end |
Instance Method Details
#service(req, res) ⇒ Object
:nodoc:
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/webrick/websocket/server.rb', line 15 def service(req, res) if req.unparsed_uri == "*" if req.request_method == "OPTIONS" do_OPTIONS(req, res) raise HTTPStatus::OK end raise HTTPStatus::NotFound, "`#{req.unparsed_uri}' not found." end servlet, , script_name, path_info = search_servlet(req.path) raise HTTPStatus::NotFound, "`#{req.path}' not found." unless servlet req.script_name = script_name req.path_info = path_info si = servlet.get_instance(self, *) @logger.debug(format("%s is invoked.", si.class.name)) if req['upgrade'].casecmp?('websocket') && si.is_a?(Servlet) res.status = 101 key = req['Sec-WebSocket-Key'] res['Sec-WebSocket-Accept'] = Digest::SHA1.base64digest(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11') res['Sec-WebSocket-Protocol'] = si.select_protocol(req['Sec-WebSocket-Protocol']).split(/[ ,\t]+/) if req['Sec-WebSocket-Protocol'] res['upgrade'] = 'websocket' res.setup_header res.instance_variable_get(:@header)['connection'] = 'upgrade' res.send_header(req.socket) sock = WEBrick::Websocket::Socket.new(req.socket, si, @logger) sock.run req.request_line = nil else si.service(req, res) end end |