站内消息

Posted by Deadline on January 4, 2017

直接看类设计吧

public class Notify {

	private Long id;
	private String title;	//标题
	private String content; //内容
	private String url; 	//链接,使用绝对地址,因为有可能发站外地址。
	private Long target;  //目标人 id
	private String targetType; //目标类型
	private String contentType; //消息内容类型: project
	private String extData;			//其它相关 id 或者备用数据
	private Long sender;	//发送人
	private String remark; //备注
	private Date createAt; //创建时间
	private Long hasReadNum; //已读数

}

public class UserNotify extends Notify{

	private Long id;
	private Long notifyId; //消息 id
	private Long memberId; //用户 id
	private Boolean isRead; //已读标记
	private Date readAt; //查看时间

}  

先从最初级的需求:向全体用户发消息开始。 因为消息内容都是一样的,所以把消息本身抽象出来。
用户消息就通过 id 关联起来,然后添加了已读标记,方便统计阅读率。

那面临的第一个问题就是生成 UserNotify 。
正常来说,我发布了一条 Notify,那么就应该为所有用户生成 UserNotify。
但是这种方法非常浪费资源,因为网站活跃用户只是注册用户的一小部分,可能一天只有几百的样子。而且瞬间生成那么多记录也会占用各种资源,可能影响到其他业务。
这里我采用的方法是用户登录的时候才会去拉取消息。然后再生成新的 UserNotify 记录。

因为登录完一般在首页,只需要展示未读消息数就够了,就是类似 iPhone 上 app 图标的那个红色小圆,里面显示未读消息数。
在消息页展示所有消息内容。

需要向特定身份的人发送消息,那么就在 targetType 字段中设置。
需要向指定的人发送消息,那就在 target 中写入用户 id。
在用户拉取消息的时候添加对应的判断条件就可以了。

这样一个比较简单的站内消息模块就完成了。
后面根据需求再继续优化扩展。


There are no comments on this post.