PHP聊天室框架workerman-chat

   workerman-chat是一个以workerman作为服务器容器,使用PHP开发的基于Websocket协议的一个可分布式部署的聊天室框架。

workerman-chat采用gateway workers 进程模型。gateway只负责网络IO,全异步非阻塞,每个gateway进程都可以同时接受上万客户端连接。 workers采用的是PHP开发者所熟悉的同步模型,并提供了开发者基本的接口 onConnect、onMessage、onClose、sendToUid、sendToAll等方法。 开发者只要在onConnect、onMessage、onClose三个方法中添加上自己的业务逻辑即可,开发维护非常简单。

由于采用的是gateway workers 进程模型,gateway和workers之间是无状态的,gateway和workers可以分别部署在不同的物理机上,所以扩容和升级都非常方便。 workerman-chat也非常适合游戏后台开发。

查看php聊天室demo请点击这里

特性

  • 使用PHP开发
  • PHP多进程
  • gateway workers进程模型
  • 支持libevent事件轮询库,支持高并发
  • 默认使用Websocket协议,更小带宽,更好性能
  • 支持分布式部署,可横向扩容
  • 客户端跨浏览器支持(需要浏览器支持html5或者flash)
  • 同样非常适合游戏后台开发

安装启动

1、下载workerman-chat,并解压缩到任意目录

2、启动workerman./bin/workermand start如下图

php聊天室启动示意图

3、浏览器访问端口55151,例如workerman.net:55151如图:

php聊天室使用界面

说明

本聊天室业务逻辑非常简单,业务逻辑都在文件./applications/Chat/Event.php中,开发者可以随意修改,比如增加私聊、表情、分组等功能

解决phpmyadmin查看表结构一直在加载的问题

   今天这两天用电脑上原来安装好的xampp上带的phpMyadmin来管理Mysql数据库,查看表结构时一直显示“正在加载”,从Google上百度后得到了解决方法,见:http://www.fenanr.com/read/112032.html

我主要用到了下面这些:
 
打开 ./libraries/Util.class.php 文件.
查找:
PHP代码
  1. return strftime($date$timestamp);  

替换成如下代码:

PHP代码
  1. if(extension_loaded('gettext'))   
  2.   return strftime($date$timestamp);  

中国区可以替换成以下代码:

PHP代码
  1. if(extension_loaded('gettext')){           
  2. date_default_timezone_set('UTC');   
  3. return gmdate('Y-m-d H:i:s'$timestamp + 28800);}  

作者提到:原理: 本地化时间格式化需要gettext支持, 假如你的环境没有开启此功能, 将会返回乱码, 影响#phpmyadmin ajax的处理. 

我这发现开启了gettext依旧会乱码,所以前部分代码用strftime不起作用,后面这个用gmdate才行。但是没必要判断gettext了吧。

搜索了一圈,没有找到乱码的解决方案,说是strftime对中文的支持不好,放弃了,用其它方法来格式化时间吧,比如date等函数。

xampp套件Apache启动失败解决方案

   刚换了工作,今天第一天报到,熟悉环境,配置开发环境。给我分配的工作电脑上已经安装有XAMPP,发现Apache启动不了,XAMPP控制面板上提示:

XML/HTML代码
  1. 11:27:36  [Apache]  Error: Apache shutdown unexpectedly.  
  2. 11:27:36  [Apache]  This may be due to a blocked port, missing dependencies,   
  3. 11:27:36  [Apache]  improper privileges, a crash, or a shutdown by another method.  
  4. 11:27:36  [Apache]  Press the Logs button to view error logs and check  
  5. 11:27:36  [Apache]  the Windows Event Viewer for more clues  
  6. 11:27:36  [Apache]  If you need more help, copy and post this  
  7. 11:27:36  [Apache]  entire log window on the forums  

  看这提示信息,应该是端口被占用,用DOS命令netstat -ano查了端口,也没发现有被占用的。用命令行模式到D:xamppapachein目录下运行httpd,提示:

XML/HTML代码
  1. AH00526: Syntax error on line 238 of D:/xampp/apache/conf/httpd.conf:  
  2. DocumentRoot must be a directory  

打开配置文件,发现DocumentRoot设置的目录已经不存在了,估计是以前用这台电脑的同事清理了,改为一个存在的目录,再重启Apache,成功了。