Skip to content

Instantly share code, notes, and snippets.

@tiye
Created May 16, 2012 16:29
Show Gist options
  • Select an option

  • Save tiye/2711916 to your computer and use it in GitHub Desktop.

Select an option

Save tiye/2711916 to your computer and use it in GitHub Desktop.
聊天室接口

这里的代码主要是 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: '还没有登陆'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment