相关疑难解决方法(0)

使用Ruby Sinatra的HTML5 Server-Sent事件

我是Ruby和Sinatra的新手,我正在尝试用它设置一个简单的HTML5 Server-Sent事件,下面的代码在Chrome开发人员版本中运行良好,但在Windows 7和OSX上的Non Developer Builds和Safari都失败了.

浏览器控制台中的错误消息是"无法加载资源:已取消"

 var source = new EventSource('pull');
        source.addEventListener('message', function(e) {
            console.log(e.data);

        }, false);

        source.addEventListener('open', function(e) {
            // Conn open
        }, false);

        source.addEventListener('error', function(e) {
            if (e.eventPhase == EventSource.CLOSED) {
                // Connection was closed.
            }
        }, false);
Run Code Online (Sandbox Code Playgroud)

以下Sinatra路线

get '/pull' do
   content_type 'text/event-stream'
   newevent   = false
   response = "data: "+newevent.inspect+" \n\n"
end
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用JSP和Tomcat的类似服务器端代码,它在所有浏览器上都能正常工作.

关于Sinatra,我需要了解什么?谢谢!

ruby html5 sinatra server-sent-events

17
推荐指数
1
解决办法
7616
查看次数

如何从websocket连接握手的头部解码cookie?(红宝石)

我正在循环中运行一个Sinatra应用程序EventMachine.run,在我的ws.onopen方法中,我希望检查handshake标头的cookie,以确保传入的请求来自我的webapp的注册用户.

我的Sinatra应用包括以下内容:

use Rack::Session::Cookie,  :key => COOKIE_KEY,
                            :path => '/',
                            :expire_after => 2592000, #30 days
                            :secret => COOKIE_SECRET
Run Code Online (Sandbox Code Playgroud)

我的ws.onopen方法看起来像这样(修剪)

ws.onopen { |handshake|
  cookie, bakesale = handshake.headers['Cookie'].split('=')
  rack_cookie = Rack::Session::Cookie.new(MyApp, {
    :key => COOKIE_KEY,
    :path => '/',
    :expire_after => 2592000, #30 days
    :secret => COOKIE_SECRET
  })
  decoded = rack_cookie.coder.decode(bakesale)
  puts "decoded: #{decoded}"

}
Run Code Online (Sandbox Code Playgroud)

cookie匹配的价值我COOKIE_KEY很好,但值decodednil

我该如何解码传入的cookie数据?

- 一段时间以后 -

我把上面的内容略微改为

ws.onopen { |handshake|
  cookie, …
Run Code Online (Sandbox Code Playgroud)

ruby cookies rack eventmachine

4
推荐指数
1
解决办法
2132
查看次数

标签 统计

ruby ×2

cookies ×1

eventmachine ×1

html5 ×1

rack ×1

server-sent-events ×1

sinatra ×1