// Teambition
socket.io
协作应用:(要求很好的同步性,reload,稳定性要高,要前后端剥离)
1、信息不能出现不对称,实时同步应用
2、讨论有明确的上下文,能够针对特定对象更新数据
3、应用能够持续运行,缓存必要数据根据网络情况进行必要操作
Server -> App (多个)
Socket.io
1、旨在在不用版本的浏览器(包括移动设别浏览器在内)间实现实时通信
2、在多种传输方式中自动选择最优方式
3、100% JavaScript
传输方式:(性能从强到弱) // http://socket.io/#browser-support
WebSocket
Adobe Flash Socket
AJAX long polling
AJAX multipart streaming
Forever iframe
JSONP Polling
安装socket
$npm install socket.io app = require(‘http‘).createServer( handler ) io = require(‘socket.io‘).listen( app ) fs = require(‘fs‘) app.listen(80) io.socket.on ‘connection‘,(socket) -> ...
前端的类:
<script src="/socket.io/socket.io.js"></script> socket = io.connect(‘http://localhost‘) socket.on ‘eventName‘,(data)->...
接口:
1、发送事件
socket.emit ‘eventName‘,{data}
2、响应事件
socket.on ‘eventName‘,(data)->...
客户端发起请求
cid = (new Data).getValue() socket.emit ‘eventName‘,{ cid:cid ... } socket.once "eventName#{cid}",(data)->...
搭建MV*应用
Backbone // http://backbonejs.org
TodoMVC// http://todomvc.com
以Backbone框架为例
实时更新前端数据
class NewModel extends Backbone.Model initialize: -> @listen() if @id ... listen: -> socket.on ":change:#{@id}",(changes) =>//change事件 @set(changes) ...
根据数据变化更新视图
class NewModel extends Backbone.Model initialize: (model) -> @model = model @render() @listen() if @model.id ... listen: -> @listenTo(@model,‘change‘,@render) ... render: -> @$el.html(Template(@model.toJSON())) ...
网络状况处理
SOCKET.connect host,{]}
例子:
SOCKET.connect = (host, option) -> unless host and window.io and (typeof window.io.connect is ‘funciton‘) return false _connect = => @socket.once("#{@eventName}.connect"),(response) => return @onError(response.error) if response.error @connectCount++ if @connectCount is 1 return @option.onConnect(response.data) else return @option.onReconnect(response.data) ) _disconnect = => return @option.onDisconnect() @options = _.extend(@options, options) @eventName = @options.eventName if @options.eventName @socket = window.io.connect(host) @socket.on(‘connect‘, _connect) @socket.on(‘disconnect‘, _disconnect) @socket.on(‘error‘, (err) => @options.onError(err))
了解更多// github.com/teambition/socket.io-hub
使用Room和Broadcase来简化多客户端同步
socket.io的性能瓶颈主要在并发消息数量
通过运行多个服务器实例来提高承载能力
使用YO进行框架搭建
使用RequireJS进行包管理
使用Grunt进行任务管理
本文出自 “悠悠灰角落” 博客,请务必保留此出处http://bamilk.blog.51cto.com/10785704/1702552
原文:http://bamilk.blog.51cto.com/10785704/1702552