这里的代码主要是 CoffeeScript 形式的伪代码, 为方便表达而已,
用 Node 作为例子, 请求的消息通过 socket.io 传送:
socket.on 'register', (json) ->
json = handle_function json
socket.emit 'register', json
每个 `socket` 会被时间计数, 比如 `100` 个消息每秒, 正常情况将进入操作, 如果数量被超过, 将会一条数据:
json =
ok: no
info: '操作太频繁被暂停'
`register` 是注册身份过程中发送的消息, 三个参数. 目前我没有尝试验证邮件, 但可想不验证的话很容易编写机器人. 客户端应当发送信息的格式:
json =
username: 5< string.length <30
passwd: 5< string.length <30
mail: []@[].[]
以下是可能的返回结果:
json =
ok: no
info: '请求的数据格式不符合'
json =
ok: no
info: '用户名已经被使用'
json =
ok: no
info: '邮箱帐号已经被使用'
json =
ok: yes
info: '注册成功'
`login` 是登录请求, 前面的 `register` 也会形成登录状态, 而且登录是在数据库保存信息的条件, 匿名访问倒是可以:
json =
username: [5< string.length <30]
passwd: [5< string.length <30]
一个帐号同时登陆没有禁止所以, 返回数据:
json =
ok: no
info: '请求数据格式错误'
json =
ok: no
info: '用户名不存在'
json =
ok: no
info: '密码错误'
json =
ok: yes
info: '登陆成功'
logout 是退出:
json =
ok: no
info: '本来就没有登录'
json =
ok: yes
info: '注销成功'
`topic` 消息表示加入一个话题, 默认是在 `''` 话题下, 时间是可选的, 时间的作用是在返回数据时限定相应的范围, 默认按上次访问时间.
json =
group: [1< string.length <20]
time:
year: [2000..2100]
month: [1..12]
date: []
minute: []
second: []
只要是话题名字, 不管是否存在都是可以加入的, 不出错就必返回,
内容是数据库上对应的话题下的数据列表的部分:
json =
ok: no
info: '数据格式不正确'
json =
ok: yes
list: [list]
`post-open` 是请求一个时间戳, 用来标记后边同步发送的消息, 时间戳取 `String(new Date.getTime())[-10..]` 的内容, 意味着在同一个 `socket.io` 的 `group` 下相同时间允许相互干扰.
json =
ok: yes
stemp: [string.length 10]
`post-sync` 将接收对象分发到群组包括自身的所有 `socket`, `stemp` 和 `topic` 信息要求一致, 所以放在服务器上, 不必重复, 数据格式不确定, 允许不同的算法解析, 接受和发送一致:
json =
method: [1< string.length < 30]
detail: [Object...]
`post-close` 用来关闭一条消息, 并且尝试存储到数据库, 不需要参数了, 但服务器会返回是否纳入存储的消息:
json =
ok: yes
info: '已保存'
json =
ok: no
info: '还没有登陆'