说明:
- 假设users表已存在
- 暂无验签
- RESTful也可以理解为RPC的一种实现方式,暂未实现
- 非业务异常报错用于监控,如插入数据失败
- 仅完成基本实现,进一步方案如下
- 消息未读数量,后续可以用缓存
- 对性能有要求时,可使用Redis
- 分页产生性能问题时,调整分页方案,如按ID分页
- Sorry
- 时间较紧,未完成写测试,仅自测接口
- 数据库连接池存在问题
- 未进行压测
git clone git@github.com:dinglixiang/msg.git
cd msg
bundle install
# 修改数据库配置, mysql
vim config/database.yml
# 创建数据库
rake db:create DB=true
# 创建相关表
rake db:migrate DB=true
# 启动hprose server
rails s
# 另起一个窗口,运行客户端,调用服务
ruby client.rb
背景:周一周二空闲时间,时间紧
- 基于Rails,使用ActiveRecord,快速实现业务逻辑;选择Hprose RPC框架,JSON数据传输,Hprose一看即懂,快速上手;而grpc等还需了解protocol buffer等内容。
- 私信存储和联系人关系都采用了数据冗余,以空间换取时间,即插入两条数据(仅收发人对换),以便满足私信的相关查询。
- 具体表结构可参考Migration
- 修改Rails的启动顺序,启动Hprose Server端;基于http,实现RPC client调用
参考:
- 返回结果格式,eg:
{code: 0, message: 'success', data: {}}
;其中code为业务代码,message为业务代码对应的说明信息, data可能为空
- 分页信息格式,列表为
list
,分页使用pagination
,包含当前页、总页数、总数等信息,eg:{code: 0, message: 'success', data: {list: [], pagination: {...}}
参数 |
类型 |
说明 |
备注 |
user_id |
Integer |
当前用户ID |
|
page |
Integer |
当前页 |
默认第一页 |
per_page |
Integer |
分页大小 |
默认10 |
# 正常
{
"code": 0,
"message": "success",
"data": {
"list": [
{
"friend_id": 1,
"unread_count": 1
}
,...],
"pagination": {
"total_pages": 1,
"total_count": 1,
"page": 1
}
}
}
参数 |
类型 |
说明 |
备注 |
user_id |
Integer |
当前用户ID |
|
friend_id |
Integer |
新联系人ID |
|
# 正常
{
"code": 0,
"message": "success",
"data": {}
}
# 异常
{
"code": 1,
"message": "had been friend",
}
参数 |
类型 |
说明 |
备注 |
user_id |
Integer |
当前用户ID |
|
friend_id |
Integer |
联系人ID |
|
# 正常
{
"code": 0,
"message": "success",
"data": {}
}
# 异常
{
"code": 2,
"message": "user info error",
}
参数 |
类型 |
说明 |
备注 |
user_id |
Integer |
当前用户ID |
|
friend_id |
Integer |
联系人ID |
|
content |
String |
消息内容 |
仅文字 |
# 正常
{
"code": 0,
"message": "success",
"data": {}
}
# 异常
{
"code": 1,
"message": "not friend",
}
参数 |
类型 |
说明 |
备注 |
user_id |
Integer |
当前用户ID |
|
friend_id |
Integer |
新联系人ID |
|
page |
Integer |
当前页 |
默认第一页 |
per_page |
Integer |
分页大小 |
默认10 |
# 正常
{
"code": 0,
"message": "success",
"data": {
"list": [
{
"id": 1,
"status": "readed",
"content": "test",
"created_at": 1505226446
}
,...],
"pagination": {
"total_pages": 1,
"total_count": 1,
"page": 1
}
}
}
说明:根据用户信息,将当前时间之前的私信皆标记为已读
参数 |
类型 |
说明 |
备注 |
sender_id |
Integer |
发送者ID |
|
reciever_id |
Integer |
接受者ID |
|
{
"code": 0,
"message": "success",
"data": {}
}
参数 |
类型 |
说明 |
备注 |
user_id |
Integer |
当前用户ID |
|
msg_id |
Integer |
消息内容ID |
|
{
"code": 0,
"message": "success",
"data": {}
}