文档章节

PHP分组聊天室--fooking现实

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

   最近也是比较忙,公司打码,回家继续打,越忙越折腾! 一个不小心半夜一点了,花了一晚上时间终于把这个分组聊天室写完了,前两天刚把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://就能找到)


© 著作权归作者所有

共有 人打赏支持
呵大官人

呵大官人

粉丝 118
博文 17
码字总数 15799
作品 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.3K
14
OSChina 技术周刊第二十八期 —— 用 React 编写移动应用

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

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

没有更多内容

加载失败,请刷新页面

加载更多

python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
4分钟前
0
0
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
11分钟前
8
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
40分钟前
1
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
45分钟前
1
0
大数据学习脑图以及入门教程!

近些年,大数据的火热可谓是技术人都知道啊,很多人呢,也想学习大数据相关,所以,这里分享几个大数据脑图,希望可以让你清楚明白从哪里入门大数据,知道该学习以及掌握哪些知识点; 大数据...

董黎明
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部