我是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,我需要了解什么?谢谢!
我正在循环中运行一个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
很好,但值decoded
是nil
我该如何解码传入的cookie数据?
- 一段时间以后 -
我把上面的内容略微改为
ws.onopen { |handshake|
cookie, …
Run Code Online (Sandbox Code Playgroud)