文档章节

PHP分组聊天室--fooking现实

呵大官人
 呵大官人
发布于 2015/04/02 01:32
字数 631
阅读 4571
收藏 67

   最近也是比较忙,公司打码,回家继续打,越忙越折腾! 一个不小心半夜一点了,花了一晚上时间终于把这个分组聊天室写完了,前两天刚把fooking的websocket协议加上,纯lua实现。

   fooking的项目地址:http://git.oschina.net/scgywx/fooking

   在线demo地址: http://182.254.135.131/chat/

   开发聊天室这基本是上每个搞socket长连接的一个通例了,主要是实现起来简单,能使用最少的代码实现客户端与服务端持久通信,那么这次也不例外,还是拿聊天室说事,不过这次要"高级"一点,能分组,而不是发个消息就广播给所有人。当某个用户向指定组发送数据时,只有在此分组的用户才能收到消息,别的分组不会收到消息。当然这里的分组是利用了fooking的一个组播机制,把N个客户端加入到一个分组(组名可以是任意字符串),发消息的时候只需要指定组名即可(其实也就是存储一个列表,然后遍历发送,只是这一步由fooking完成)。

   聊天室的界面大概就是如下这样子,左边是用户列表,右上方是频道列表(可以选择),下面是消息列表,当选择一个你没有加入过的频道将会弹出“加入此频道“的按钮,点击就能加入该频道了,剩下的就是聊天了,大致功能就是这样子。


    这样一个聊天室程序,只需要不到100行php和不到200行html/css/js,其配置也非常简单,如下步骤:

    1、启动router, 修改项目src目录下的router.lua配置文件(比如:端口,日志等),然后执行:./fooking router.lua

    2、启动gateway, 修改项目src目录下的config.lua配置文件(比如:端口,router端口,script, php程序路径等,最主要是FASTCGI_ROOT),  然后执行: ./fooking config.lua   

              注意:  在config.lua里面配置了script.lua(用于处理打包和解包),在修改config.lua的时候请注意script.lua的路径

                          script.lua里面使用了websocket协议,他需要依赖另一个Sha1.lua文件(在src目录就有),请注意一定要把script.lua与Sha1.lua放在同一目录,不然可能会报错

    3、 安装php-fpm、redis、redis扩展

    4、修改example/chat/index.html文件里面websocket的IP和端口(查找ws://就能找到)


© 著作权归作者所有

共有 人打赏支持
呵大官人

呵大官人

粉丝 123
博文 18
码字总数 16428
作品 1
浦东
高级程序员
私信 提问
加载中

评论(13)

g
gongmaolan
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方便,GoEasy就挺不错的,我昨天试了一下,代码简洁易懂,几分钟我就洗了一个自己的实时推送功能;官网: http://goeasy.io/
MrLovelyCbb
MrLovelyCbb

引用来自“IM鑫爷”的评论

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么

引用来自“MrLovelyCbb”的评论

不知道你web那层是怎么部署的,我用的lnmpa 。。谢谢你的回复。

引用来自“IM鑫爷”的评论

我重文章重新修改了一次,两个标记红色的地方,你要修改的。。 1、config.lua里面的FASTCGI_ROOT,这是聊天室gateway.php的路径 2、index.html里面的服务器host与port(查找ws://)

引用来自“MrLovelyCbb”的评论

http://120.26.57.166/fooking/example/chat/index.html 我这边还是连不上,不知道是啥原因呢? index 改成了 ws://127.0.0.1:9001

引用来自“IM鑫爷”的评论

我把ws改成120.26.57.166:9001,能连上,而且websocket握手也成功了,说明fooking已经启动成功了,但是发消息没有返回!你看一下日志输出什么。也可能是php路径不对,你看一下config.lua里面的FASTCGI_ROOT。还有你的fpm是以socket方式还是用unix domain socket启动的,如果是unix domain socket,你就需要修改BACKEND_SERVER..这些跟nginx的配置基本都差不多,只是变量名不一样而已。

引用来自“MrLovelyCbb”的评论

嗯,好的,谢谢回复,我改下试试看。能加下你qq吗?

引用来自“IM鑫爷”的评论

304463400,或者加群:321489181
需要答案,答案是啥啊?
呵大官人
呵大官人

引用来自“IM鑫爷”的评论

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么

引用来自“MrLovelyCbb”的评论

不知道你web那层是怎么部署的,我用的lnmpa 。。谢谢你的回复。

引用来自“IM鑫爷”的评论

我重文章重新修改了一次,两个标记红色的地方,你要修改的。。 1、config.lua里面的FASTCGI_ROOT,这是聊天室gateway.php的路径 2、index.html里面的服务器host与port(查找ws://)

引用来自“MrLovelyCbb”的评论

http://120.26.57.166/fooking/example/chat/index.html 我这边还是连不上,不知道是啥原因呢? index 改成了 ws://127.0.0.1:9001

引用来自“IM鑫爷”的评论

我把ws改成120.26.57.166:9001,能连上,而且websocket握手也成功了,说明fooking已经启动成功了,但是发消息没有返回!你看一下日志输出什么。也可能是php路径不对,你看一下config.lua里面的FASTCGI_ROOT。还有你的fpm是以socket方式还是用unix domain socket启动的,如果是unix domain socket,你就需要修改BACKEND_SERVER..这些跟nginx的配置基本都差不多,只是变量名不一样而已。

引用来自“MrLovelyCbb”的评论

嗯,好的,谢谢回复,我改下试试看。能加下你qq吗?
304463400,或者加群:321489181
MrLovelyCbb
MrLovelyCbb

引用来自“IM鑫爷”的评论

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么

引用来自“MrLovelyCbb”的评论

不知道你web那层是怎么部署的,我用的lnmpa 。。谢谢你的回复。

引用来自“IM鑫爷”的评论

我重文章重新修改了一次,两个标记红色的地方,你要修改的。。 1、config.lua里面的FASTCGI_ROOT,这是聊天室gateway.php的路径 2、index.html里面的服务器host与port(查找ws://)

引用来自“MrLovelyCbb”的评论

http://120.26.57.166/fooking/example/chat/index.html 我这边还是连不上,不知道是啥原因呢? index 改成了 ws://127.0.0.1:9001

引用来自“IM鑫爷”的评论

我把ws改成120.26.57.166:9001,能连上,而且websocket握手也成功了,说明fooking已经启动成功了,但是发消息没有返回!你看一下日志输出什么。也可能是php路径不对,你看一下config.lua里面的FASTCGI_ROOT。还有你的fpm是以socket方式还是用unix domain socket启动的,如果是unix domain socket,你就需要修改BACKEND_SERVER..这些跟nginx的配置基本都差不多,只是变量名不一样而已。
嗯,好的,谢谢回复,我改下试试看。能加下你qq吗?
呵大官人
呵大官人

引用来自“IM鑫爷”的评论

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么

引用来自“MrLovelyCbb”的评论

不知道你web那层是怎么部署的,我用的lnmpa 。。谢谢你的回复。

引用来自“IM鑫爷”的评论

我重文章重新修改了一次,两个标记红色的地方,你要修改的。。 1、config.lua里面的FASTCGI_ROOT,这是聊天室gateway.php的路径 2、index.html里面的服务器host与port(查找ws://)

引用来自“MrLovelyCbb”的评论

http://120.26.57.166/fooking/example/chat/index.html 我这边还是连不上,不知道是啥原因呢? index 改成了 ws://127.0.0.1:9001
我把ws改成120.26.57.166:9001,能连上,而且websocket握手也成功了,说明fooking已经启动成功了,但是发消息没有返回!你看一下日志输出什么。也可能是php路径不对,你看一下config.lua里面的FASTCGI_ROOT。还有你的fpm是以socket方式还是用unix domain socket启动的,如果是unix domain socket,你就需要修改BACKEND_SERVER..这些跟nginx的配置基本都差不多,只是变量名不一样而已。
MrLovelyCbb
MrLovelyCbb

引用来自“IM鑫爷”的评论

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么

引用来自“MrLovelyCbb”的评论

不知道你web那层是怎么部署的,我用的lnmpa 。。谢谢你的回复。

引用来自“IM鑫爷”的评论

我重文章重新修改了一次,两个标记红色的地方,你要修改的。。 1、config.lua里面的FASTCGI_ROOT,这是聊天室gateway.php的路径 2、index.html里面的服务器host与port(查找ws://)
http://120.26.57.166/fooking/example/chat/index.html 我这边还是连不上,不知道是啥原因呢? index 改成了 ws://127.0.0.1:9001
呵大官人
呵大官人

引用来自“IM鑫爷”的评论

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么

引用来自“MrLovelyCbb”的评论

不知道你web那层是怎么部署的,我用的lnmpa 。。谢谢你的回复。
我重文章重新修改了一次,两个标记红色的地方,你要修改的。。 1、config.lua里面的FASTCGI_ROOT,这是聊天室gateway.php的路径 2、index.html里面的服务器host与port(查找ws://)
呵大官人
呵大官人

引用来自“IM鑫爷”的评论

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么

引用来自“MrLovelyCbb”的评论

不知道你web那层是怎么部署的,我用的lnmpa 。。谢谢你的回复。
其实很简单啊,这个聊天室的例子,可以不需要web的,,直接用浏览器打开index.html就可以了!
MrLovelyCbb
MrLovelyCbb

引用来自“IM鑫爷”的评论

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么
不知道你web那层是怎么部署的,我用的lnmpa 。。谢谢你的回复。
呵大官人
呵大官人

引用来自“崔波波”的评论

部署到服务器上,咋跑起来啊 web那层跑不起来

有没有什么提示?router和gateway都运行了吗?使用index.html访问的时候,gateway的日志是什么
Go语言开发分布式聊天室

声明 我是一个刚学go语言的菜鸟,还没有资格谈论什么技术分享,只是为了展示fooking的实际应用,同时把我用go写的聊天室代码贴出来供大家消遣,如果有入不了各位法眼的代码,望轻喷。该聊天室...

呵大官人
2015/08/28
5.1K
6
PHP游戏开发之大家一起来玩泡泡堂

在fooking完成的第一版里面附带了一个简单的聊天室来说明了fooking的功能,这次利用周末两天写了一个稍微比聊天室复杂点的小游戏!能跑动,能放泡,能聊天,能控制死亡。演示地址:http://18...

呵大官人
2014/12/15
0
5
呵大官人/fooking

fooking是一个分布式网关服务器,主要用于承载客户端连接,将客户端请求转发到后端逻辑服务器,然后把逻辑服务器返回的结果转发到客户端. 他类似Nginx,使用Nginx + FastCGI Server(如:FPM...

呵大官人
2014/12/10
0
0
fooking 0.1.0 发布,分布式网关服务器

fooking是一个分布式网关服务器,主要用于承载客户端连接,将客户端请求转发到后端逻辑服务器,然后把逻辑服务器返回的结果转发到客户端。他类似Nginx,使用Nginx + FastCGI Server(如:FPM...

呵大官人
2015/08/28
2.5K
14
OSChina 技术周刊第二十八期 —— 用 React 编写移动应用

每周技术抢先看,总有你想要的! 移动开发 【软件】RichEditor for Android 【软件】用 React 编写移动应用 React Native 【软件】iOS 图表控件 ios-charts 【博客】iOS 越狱开发——如何将应...

OSC编辑部
2015/04/05
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 系统设置SQL

打开、关闭日志 SET GLOBAL general_log = 'Off'; SET GLOBAL general_log = 'On'; 查看日志是否打开 show variables like '%general%';...

jingshishengxu
54分钟前
2
0
转行学大数据,如何选择如何学习大数据开发?

大数据火了几年了,但是今年好像进入了全民大数据时代,本着对科学的钻(zhun)研(bei)精(tiao)神(cao),我在17年年初开始自学大数据,后经过系统全面学习,于这个月跳槽到现任公司。 现在已经...

董黎明
55分钟前
4
0
RadosClient OSDC

RadosClient.h class librados::RadosClient : public Dispatcher//继承自Dispatcher(消息分发类){public: using Dispatcher::cct; md_config_t *conf;//配置文件private: ......

banwh
今天
3
0
如果让你写一个消息队列,该如何进行架构设计?

面试题 如果让你写一个消息队列,该如何进行架构设计?说一下你的思路。 面试官心理分析 其实聊到这个问题,一般面试官要考察两块: 你有没有对某一个消息队列做过较为深入的原理的了解,或者...

李红欧巴
今天
6
0
错题

无知的小狼
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部