Heim >Backend-Entwicklung >PHP-Tutorial > 用memcache 来实现聊天室的可能性探讨.该如何解决

用memcache 来实现聊天室的可能性探讨.该如何解决

WBOY
WBOYOriginal
2016-06-13 13:48:15966Durchsuche

用memcache 来实现聊天室的可能性探讨.
突然想起这么个话题,当然要做复杂的是肯定不行的,我们只探讨将文本通过memcache实现聊天应用的可能..
首先摆在我们面前的是这个key要怎么维护?有没有实现的可能?

------解决方案--------------------
由于需要记录聊天内容和聊天人的信息
所以每笔数据应该是一个“结构”而不是单一的值

鉴于聊天内容是不可修改的,所以 key 并无实际意义,递增即可
至多是取时间值
------解决方案--------------------
聊天室需要缓存的东西不是很多啊。
------解决方案--------------------
研究过python的聊天室...关注一下
------解决方案--------------------
进来学习,这一块没什么经验。
------解决方案--------------------
本来聊天室就是个蛋疼的功能。得耗费多少资本啊。

没有这方面的经验,实现的方法有多种。把聊天数据存数据库或本地文件或memcache,显示数据会用到推送。听说还可以用socket来实现。 也没测试过。不知道哪种效率高。
------解决方案--------------------

探讨
本来聊天室就是个蛋疼的功能。得耗费多少资本啊。

没有这方面的经验,实现的方法有多种。把聊天数据存数据库或本地文件或memcache,显示数据会用到推送。听说还可以用socket来实现。 也没测试过。不知道哪种效率高。

------解决方案--------------------
虽然不懂web, 但是跑fcgi做单独的聊天服务器是可行的.
------解决方案--------------------
探讨

引用:
本来聊天室就是个蛋疼的功能。得耗费多少资本啊。

没有这方面的经验,实现的方法有多种。把聊天数据存数据库或本地文件或memcache,显示数据会用到推送。听说还可以用socket来实现。 也没测试过。不知道哪种效率高。


用websocket做长连接是很不错的!

------解决方案--------------------
探讨

虽然不懂web, 但是跑fcgi做单独的聊天服务器是可行的.

------解决方案--------------------
除非浏览器或flash本身是服务器时,如有开放端口,推技术才可能成真。

http是请求-响应式的。 是要是uri,都可请求。

猜想QQ, 每个用户都有好友的端口中。
也是有两种方式实现: 一是有数据存中央数据库;二是一个用户发言,然后向群里广播。


------解决方案--------------------
memcached的替代品? 
redis吧,数据放入内存,但也支持在硬盘上持久化保存,配置正常的情况下,性能大概是memcached的十倍(网上的数据,俺自己测没打到过,但5倍以上是确认的)。

另外,做聊天室是可行的,并且也有类似的代码, redis官网有个示例,是完全用redis来做的模仿twiiter的页面。project名称好像叫“retwis”

以前也看到过设计,一般key是用散列值即可吧,比如 用户名_时间 然后md5一下之类的...
------解决方案--------------------
探讨

除非浏览器或flash本身是服务器时,如有开放端口,推技术才可能成真。

http是请求-响应式的。 是要是uri,都可请求。

猜想QQ, 每个用户都有好友的端口中。
也是有两种方式实现: 一是有数据存中央数据库;二是一个用户发言,然后向群里广播。

------解决方案--------------------
时间戳做key

由于mem 的value值是有大小限制的

可以每过一段时间生成个key 然后内部是json格式

例如 
每五分钟一个key 
然后把这五分钟内的聊天记录都放到mem中

然后 用户登录根据当前的时间戳来查询 
不知道可否
------解决方案--------------------
呃,好吧,从目前的经验来看,如果单台服务器来做的话,私以为用长连接是不合适的,短连接做聊天室能够实现更多的访问量。

假设一台16核心16G的服务器,Nginx + PHP-FCGI的话,大概可靠并发能达到3W,那么长连接,最多也就是3W用户喽?(3W是俺自己测试的情况,俺渣....不过另外也参考了张宴的blog,姑且国内nginx的先驱者吧) 但短连接的话,就看Nginx每秒最多的request和 后端存储每秒最多request的能力了

以下是nginx和redis的单独 request能力 测试:
nginx,以phpinfo.php为测试内容

PHP code
./webbench -c 10000 -t 30 "http://127.0.0.1/test.php"
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://127.0.0.1/test.php
10000 clients, running 30 sec.

Speed=230470 pages/min, 46263036 bytes/sec.
Requests: 115235 susceed, 0 failed.
<br><font color="#e78608">------解决方案--------------------</font><br>没搞 过这方面,,表示很有压力。。<br><br>
探讨

呃,好吧,从目前的经验来看,如果单台服务器来做的话,私以为用长连接是不合适的,短连接做聊天室能够实现更多的访问量。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn