最近做一个即时通讯 web ,这个怎么做呢?
1
ss098 2017-04-17 17:50:44 +08:00
JSON 格式存储
|
2
em70 2017-04-17 17:54:29 +08:00 via Android
XML 也可以
|
3
johnny23 2017-04-17 19:06:20 +08:00 via iPhone
你这个需求太可怕了...
|
5
zwl2012 2017-04-18 13:27:39 +08:00 via iPhone
另外创建一个记录表吧,你强行放到一个一段的话扩展性几乎没有。后面多人聊天怎么办?要撤回 /删除某个聊天记录怎么办?
|
7
zwl2012 2017-04-18 15:50:08 +08:00 via iPhone
就一个聊天记录表,字段有 id 时间 归属用户 目标用户 状态 ;调取某段会话直接根据目标用户查表再按时间排序即可。记录是一条一条插入的。
|
8
fyyz 2017-04-18 16:39:01 +08:00
三个字段:
1 ,发送者 ID 2 ,接受者 ID 3 ,内容 可以扩展,添加这些字段: 4 ,发送时间 5 ,接收时间,为空则未接收 如果有群组再扩展(针对第二个字段): 7 ,接收者类型( enum[个人,群组,讨论组]) ... |
9
fyyz 2017-04-18 16:41:25 +08:00
4 能让以后浏览聊天记录很方便,还能实现消息未发送成功提醒,避免客户端反复重新发送,其实就是应用层的 ACK 包。
5 能实现离线消息功能。 |
10
fyyz 2017-04-18 16:42:20 +08:00
其实我非常建议看看 TCP 的实现,我这套方案基本上是照着 TCP 的原理出的。
|
11
fyyz 2017-04-18 16:47:34 +08:00
如果你要全部放进一个字段也可以,把我上面说的这些字段全部丢一个 json 里。但是弊端是,如果我要查看某两个用户的全部聊天记录,你就不能写出这种 SQL 了:
select * from chat_log where (sender_id = 1 and recver_id = 2) or (sender_id = 2 and recver_id = 1) 你必须在业务层遍历所有的聊天记录 json ,然后逐条分析。 |
12
gongziqi OP @fyyz 我想问下大兄弟,对于聊天记录你能提供个思路给我吗?就是我现在做的 web IM ,用 websocket z 做协议。现在的想法是一条一条插入表字段中,但是这样太耗资源了,有没有新的办法?还有那个(
ID VARCHAR2(32) not null,聊天记录 id CREATE_TIME DATE,创建时间 CONTENT CLOB,聊天内容 SEND_ID VARCHAR2(32),发送用户 id RECEICE_ID VARCHAR2(32),接收人 ID' STATES CHAR(2) default 0 ) 这是我的表设计,对于插入记录和查询记录(发不同的人和点不同的人 插表 )怎样做好点呢 |
13
fyyz 2017-04-20 09:43:05 +08:00
我想我已经说得很清楚了,但是我没有看懂你的问题:
对于插入记录和查询记录(发不同的人和点不同的人 插表 )怎样做好点呢 这话什么意思? |
15
fyyz 2017-04-20 10:26:38 +08:00
在 11 楼写得很清楚了。仔细看下?当然这种 SQL 必须配合我楼上给出的表结构。
|