`
hot88zh
  • 浏览: 182939 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何创建好友动态

阅读更多

好友动态在各大社交网站中基本上已经是标配了,而且一般都会显示在用户登录之后的默认首页上,这种做法的确方便用户了解网站和自己朋友的一些动态。设计上应该如何实现呢?Google 了一些资料,整理在下面,欢迎有实际经验的朋友指点!

用户看到的可能是三种情况:

  • 我的动态
  • 好友的动态
  • 全站的动态

朋友动态这种信息,根据网站的实际情况需要考虑几个问题:

1、是否只让用户看到最新n条?(海内的最新动态数量是固定的,采用先进先出原则,用户只能看到最新的n条;而UCH则可以每页150条允许用户翻页

2、用户增减好友后,朋友动态是否能够立刻体现出变化?(在海内,我如果在好友名单中删除一个人,好友动态还会有他的信息,只是不新增他的信息而已;而UCH里面,他的信息立刻消失。加一个人为朋友,也是一样的效果。

3、用户能否删除自己产生的动态?

4、阅读者是否可以删除其朋友动态中某一条动态?(在校内用户可以删除某一条朋友动态,在UCH用户可以屏蔽某人或者所有人的某类动态,在海内你只能看不能屏蔽

5、动态是否有阅读权限?

6、动态所指向的信息被修改、删除,动态是否要同步变化?(如果你修改了日志的标题,校内网的动态是不变的,而海内是变化的

最简单的实现方式是将所有事件记录到一张表里:
Event
- id
- user_id
- type
- data
- created_at
这样做比较适合用于显示全站更新,针对用户推送时,缺点明显:用户加好友后会显示出成为好友前的所有动态,删好友后之前的所有动态也看不到了。另外用户不能对活动进行删除,因为每个活动消息只有一份拷贝。
data 中可以用 json 来记录用户的动作,比如:
{
photoId
:
2089
,
 photoName
:
A trip to the beach
}


PS: QQ新版的消息中心,对于同一好友下不同类型的操作都能合并。这时候如果动态表包括有type的字段,就不太好对付了,可以改成:

data中保存用户的操作日志,也就是本贴讨论的重点。我采用的方法是前面有同学提到json方式。 如:

{
“blog”:[  {"id":1,"title":"安利台湾25周年庆"} ],
“photo”:[  {"id":1,"title":"51韶关游"} ]
}

其中blog、photo代表某种应用的标识,可以无限添加。只要显示的时候能分析就行。里面的id和title就是内容 的属性,结构自定。至于新旧操作怎么合并,我是采取对event表的插入操作进行拦截实现的——我定义会员所有的操作均调用event的插入方法。在拦截 函数中,先select该会员的记录。如返回为空,则直接插入新记录。如返回记录,则将待插入数据与原数据进行合并。如待插入数据为:

{
“blog”:[  {"id":2,"title":"我是谁"} ],

“share”:[  {"url":"http://www.tudou.com","title ":"土豆网 - 视频 - 播客 - 每个人都是生活的导演"} ]
}

则合并后的content为:

{
“blog”:[  {"id":2,"title":"我是谁"}  {"id":1,"title":"安利台湾25周年庆"}, ],

“photo”:[  {"id":1,"title":"51韶关游"} ],

“share”:[  {"url":"http://www.tudou.com","title ":"土豆网 - 视频 - 播客 - 每个人都是生活的导演"} ]
}

然后使用update方法即可。

为解决上面的问题,可以添加一个 EventUser 表,当用户发生动作后,用户的动作写在 Event 表中,给该用户的所有好友发一个消息,记录在 EventUser 表中
EventUser
- id
- event_id
- friend_user_id
- created_at
需要注意的是一定时间内完成的某些动作,对 Event 表应该更新,而不是插入。比如同时加N个好友可以合并到一个 event 中。另外当用户的动作被撤销后,也要考虑对应的 event 如何撤销。比如用户传了一张照片,然后又删掉了,这时如果传照片可以 event 没删掉,用户在动态列表中还会看到,XXX上传了一张照片,但点进去,照片已经不存在了。
优化:
Event 表可以做 mem cache
EventUser 表可以水平切分,分到多张表中,可以定期清除
写 EventUser 表的操作可以抛个消息,异步操作。或者先写到 mem cache 里,到一定条件时再持久化。
references:
分享到:
评论

相关推荐

    ExpandableListView 实现QQ好友动态与评价

    接着,我们还需要创建两套布局:一个用于显示好友列表(父项),另一个用于显示好友动态和评价(子项)。使用XML布局文件定义这些视图,并在适配器中通过`inflate()`方法将它们与数据绑定。 在事件处理方面,`...

    android 仿QQ好友动态 title滑动渐变

    在Android开发中,为了提升用户体验,许多应用会采用各种炫酷的动画效果,"android 仿QQ好友动态 title滑动渐变"就是这样一个例子。这个实例代码是针对Android平台,模仿QQ应用中好友动态标题栏在滑动时的渐变效果。...

    AJAX无刷新 支持私聊 动态生成好友列表 聊天室

    前端根据返回的数据动态创建列表项,实现列表的实时更新。 5. 聊天室架构: 本项目可能包含以下组件:用户认证系统、聊天服务器(如使用Socket.IO或WebSockets实现实时通讯)、数据库(存储用户信息、好友关系和...

    Android ListView 自定义adapter好友列表

    此外,为了优化性能,还可以使用StaggeredGridLayoutManager结合RecyclerView来创建瀑布流布局的好友列表,或者使用LoadMore功能来动态加载更多数据。 总之,通过自定义Adapter,我们可以根据需求自由设计Android...

    易语言仿QQ好友列表框源码

    4. **动态加载与更新**:好友列表可能会随着时间和操作变化,源码应包含动态加载和更新好友信息的机制。 5. **网络通信**:如果想要模拟QQ的实时在线状态,需要实现简单的网络通信,获取服务器上好友的在线状态信息...

    ScrollView实现图片拉伸效果,仿QQ好友动态头部效果

    在Android开发中,创建一个类似QQ好友动态头部的图片拉伸效果是一个常见的需求,它可以提供一个优雅的用户体验,特别是当用户滚动时,头部图片能够随着滚动动态地放大或缩小。这个效果主要通过ScrollView和自定义...

    c++好友信息管理系统

    在实现菜单系统时,可能会使用指针来动态分配内存,创建和操作好友对象。 4. **控制台I/O(Console Input/Output)**:C++提供了标准输入输出流(cin和cout)进行控制台交互。在这个系统中,用户可能通过键盘输入...

    自定义微信好友列表

    6. 动态刷新:当有新的好友添加、删除或信息更新时,好友列表需要实时反映这些变化。这需要监听数据库的变化并自动刷新UI。 7. 安全性:考虑到隐私问题,好友列表的访问和操作应受到权限控制,防止未授权的访问和...

    qq好友增删

    用户可以根据关系、兴趣等标准创建自定义分组,将好友归类。 5. 好友权限设置: - 隐身可见:用户可以设置某些好友对自己的隐身状态可见,即使自己在线,对方也会显示为离线。 - 防止骚扰:可以设置拒绝陌生人...

    jsp java tomcat 添加好友demo

    数据库脚本`friendsys.sql`很可能是用于创建这些表的SQL语句,可能包含了创建用户表、好友请求表等的DDL(Data Definition Language)语句,以及处理数据插入、更新、删除等的DML(Data Manipulation Language)语句...

    仿qq好友列表

    3. **动态数据绑定**:在实际应用中,好友列表的数据通常是动态的,需要与服务器进行交互。这涉及到了后端API的调用和前端的异步处理。使用AJAX或者Fetch API可以实现客户端与服务器的数据交换,获取好友列表并实时...

    仿QQ好友动态添加说说、图片菜单滑动移进移出效果--在指定控件下面显示popupwindow动画不移效果

    总之,通过合理利用PopupWindow、AlphaAnimation和TranslateAnimation,我们可以创建出类似QQ好友动态那样富有交互性的功能。理解并掌握这些技术,对于提升Android应用的用户体验至关重要。在实际开发中,不断实践和...

    Android仿qq好友分组

    在Android开发中,创建一个类似QQ的好友分组功能是一个常见的需求,这涉及到自定义视图、数据绑定以及图片加载等多个技术点。本项目通过使用`ExpandableListView`控件来实现这一功能,同时实现了头像的动态加载,...

    易语言仿QQ好友列表框

    3. **分组操作**:"定义组"和"创建组"涉及到数据结构的初始化和动态扩展。开发者需要编写函数或过程来添加、删除、修改分组,同时保证数据的一致性。 4. **事件处理**:在易语言中,事件驱动编程是常见的编程模式。...

    QQ好友信息显示

    窗体可以通过Visual Studio等集成开发环境(IDE)进行可视化设计,也可以通过代码动态创建。 显示好友信息通常涉及到数据结构和对象的使用。在C#中,可以创建一个`Friend`类来封装好友的属性,如姓名、QQ号、备注等...

    jsp servlet 好友系统 增删查改,含分页,分页后排序不变

    1. **创建(Create)**:用户可以添加新的好友,这通常涉及到一个表单提交,Servlet接收这个请求,处理数据验证,然后将新好友的信息插入到数据库中。 2. **读取(Read)**:用户可以查看好友列表,Servlet会查询...

    模仿QQ好友列表OCX

    总的来说,这个“模仿QQ好友列表OCX”是一个针对开发者社区的工具,旨在简化创建类似QQ好友列表功能的过程,提供了一种高效且直观的方式来管理和显示联系人信息,同时保持了与QQ原生体验的相似性。对于那些希望在...

    QT实现的聊天界面,好友列表,支持文字和动态图像收发,python写的,C语言也可以参考.zip

    【标题】中的知识点主要涉及到的是使用QT框架实现的一个聊天应用程序,该程序具备好友列表功能,并且支持文字和动态图像的收发。QT是一个跨平台的C++图形用户界面库,它提供了一整套工具用于创建GUI应用。在这里,...

    简单仿QQ好友列表

    在创建“简单仿QQ好友列表”时,开发者会用到C#的类、对象、事件处理等概念,编写代码来动态加载和管理好友数据。 3. **数据存储**:好友数据可能需要存储在数据库或文件中,如SQLite、XML文件或JSON格式的数据。...

    qt好友列表

    - 动态加载:如果好友数量巨大,可以采用分页或滚动加载机制,减少初次加载时的等待时间。 - 拖放操作:允许用户通过拖放重新排列好友顺序或移动好友至不同分组。 总的来说,实现Qt好友列表控件涉及了Qt的核心组件...

Global site tag (gtag.js) - Google Analytics