作者defsrisars (阿转)
看板PHP
标题[请益] 关於websocket实作聊天室的问题
时间Wed Jul 13 17:35:54 2016
不好意思
最近刚开始接触网页设计
想请问一下关於聊天室的设计
版上的文大概都爬了
也Google了很多websocket的文章
目前大概只只能写出用自己本机挂server.php会一直回传date给client
我想写像FB或wootalk那样的聊天室
(可能是1-1或n-n)
想请问如果是1-1的话,假如A和B
1.那麽A.B两人的讯息都是由server端回传印吗?
还是自己key的讯息由自己client直接印,对方的server回传後再印
後者会对效能比较好吗?不过如果要像FB那样保留历史讯息是不是还是得经过server进後
端资料库
2.假设A-B两人聊天、C-D两人聊天,server端要怎麽知道A和B的讯息要丢给A和B,C和D的
讯息要丢给C和D?
还是每次有讯息进来就存到资料库再把资料库资料丢回去?(资料表有row纪录sender和r
eceiver)
但是如果是这样靠资料库判断的话,如果有x个人的群组该怎麽办呢?
不好意思,这方面观念没有很好,谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.168.78.51
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1468402557.A.030.html
1F:→ MOONRAKER: 就记群组里面有谁 然後群组内对话通通送一份啊 07/13 17:59
2F:→ xdraculax: 对话区要统一收server给的,对话前後顺序才会一致 07/14 08:37
3F:→ alpe: public subscribe pattern 07/14 09:30
4F:推 lhsieh: html5 webrtc 07/25 12:22
5F:→ et69523820: 通常我会建立一个聊天室成员物件 必要属性要有 07/26 01:49
6F:→ et69523820: 群组ID 和 使用者唯一编号 最少要有这2个 就可以达到 07/26 01:50
7F:→ et69523820: 分群 和 私聊了 07/26 01:51
8F:→ et69523820: A和B的讯息要丢给A和B 这属於私聊 透过使用者唯一编号 07/26 01:52
9F:→ et69523820: 就会知道聊天讯息要传给谁 07/26 01:52
10F:→ et69523820: 基本上即时聊天讯息 不会从资料库读出 除非是历史讯息 07/26 02:02
11F:→ et69523820: 即时讯息 量是很恐怖的 资料库会受不了 我的做法 07/26 02:03
12F:→ et69523820: 当接收到讯息 在伺服器可以把讯息缓存或直接就转发 07/26 02:04
13F:→ et69523820: 讯息缓存的好处是 近期的历史讯息不用到资料库 就可以 07/26 02:05
14F:→ et69523820: 读出 比如你收到一个群组为PP 目标使用者编号1234 07/26 02:06
15F:→ et69523820: 就去扫描你目前的线上聊天名单 有关群组PP 编号1234 07/26 02:07
16F:→ et69523820: 发送讯息即可 线上名单也是缓存 不用读资料库 07/26 02:08
17F:→ et69523820: 开发聊天室 资料库只是辅助 其他都缓存 如果要保留 07/26 02:09
18F:→ et69523820: 聊天室讯息写入资料库 也建议不要一笔讯息就写入一次 07/26 02:10
19F:→ et69523820: 这样讯息量一堆资料库效能会变低落 可以把讯息缓存到 07/26 02:10
20F:→ et69523820: 比如 500条讯息 在一次性写入 这样会对於资料表有索引 07/26 02:11
21F:→ et69523820: 速度会差非常多 07/26 02:11