websocket 实时推特流
DESCRIPTION
Example Code:http://github.com/shaokun/twliveTRANSCRIPT
WebSocket实时推特流
需要了解的概念• HTML 5 WebSocket
• EventMachine (EM)
• HTTP Stream
BrowserHTML 5 WebSocket
EM::WebSocket
EM::Channel
EM::HttpRequest Twitter Stream
BrowserHTML 5 WebSocket
BrowserHTML 5 WebSocket
EM::WebSocket EM::WebSocket
Publish
Subscribe
TCP Channel
HTML 5 WebSocket
• 通过 Web 的 Socket
• 全双工的通讯通道• 双向通讯• 更小的延迟,实时的
<script type="text/javascript">
// 创建 WebSocket 对象很容易 ws = new WebSocket("ws://localhost:8080/");
</script>
ws.onopen = function() {...};
ws.onclose = function() {...};
ws.onerror = function(event) {...};
ws.onmessage = function(event) {...};
ws.send(msg);
ws.close();
支持的 Browsers
• Chrome
• Safari 4.x
• Firefox 3.7
• IE ???github.com/gimite/web-socket-js
EventMachine
simple, fast, event-driven I/O library for Ruby
EM::WebSocket
EM::WebSocket.start(:host => "localhost", :port => 8080) do |ws|
ws.onopen do … end
ws.onclose do … endend
Publish/Subscribe
EM::Channel
channel = EM::Channel.new
channel << "a new message"
sid = channel.subscribe do |msg|
puts msg # should output ‘a new message’
end
HTTP Stream
Twitter Stream API
• http://stream.twitter.com/1/statuses/sample.json
• http://stream.twitter.com/1/statuses/filter.json?track=???
url = 'http://stream.twitter.com/1/statuses/sample.json'buffer = ""
http.stream do |chunk| buffer += chunk while line = buffer.slice!(/.+\r?\n/) tweet = JSON.parse(line) next unless tweet['text'] msg = "#{tweet['user']['screen_name']}: #{tweet['text']}" channel << msg endend
BrowserHTML 5 WebSocket
EM::WebSocket
EM::Channel
EM::HttpRequest Twitter Stream
BrowserHTML 5 WebSocket
BrowserHTML 5 WebSocket
EM::WebSocket EM::WebSocket
Publish
Subscribe
TCP Channel
问答??? QA