文档章节

PHP分组聊天室--fooking现实

呵大官人
 呵大官人
发布于 2015/04/02 01:32
字数 631
阅读 4371
收藏 66
点赞 3
评论 13

   最近也是比较忙,公司打码,回家继续打,越忙越折腾! 一个不小心半夜一点了,花了一晚上时间终于把这个分组聊天室写完了,前两天刚把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的日志是什么
PHP游戏开发之大家一起来玩泡泡堂

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

呵大官人
2014/12/15
0
5
Go语言开发分布式聊天室

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

呵大官人
2015/08/28
5.1K
6
呵大官人/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
OSChina 技术周刊第二十八期 —— 每周技术精粹

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

OSC编辑部
2015/04/05
0
0
分布式游戏网关--fooking

fooking 不是什么 1、不是框架 2、不是扩展 3、不是Http server 是什么 fooking是一个分布式游戏网关,主要用于承载长连接,将客户端的数据包完整的转发给后端,后端服务处理完之后由fooking...

呵大官人
2014/12/23
8.4K
3
OSChina 开源周刊 50 期,每周技术精粹

本周开源资讯 七大科技公司联手设计下一代开源视频格式 jQuery 基金会和 Dojo 基金会合并:Open Web Eclipse 寻求捐赠用于 IDE 等项目的开发 Angular 2.0 调查:43% 选择 Webstorm 编辑器 软...

OSC编辑部
2015/09/04
4.9K
3
./src/fooking config.lua 执行的时候遇到问题。

@IM鑫爷 你好,想跟你请教个问题: 我在编译成功以后,./src/fooking config.lua 执行的时候遇到问题。,以下是报错信息,还请能给个回复 root@vagrant-ubuntu-trusty:/home/vagrant/fooking...

catro2011
2016/05/13
128
1
PHP聊天室框架

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

james_laughing
2016/06/27
48
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流利阅读笔记29-20180718待学习

高等教育未来成谜,前景到底在哪里? Ray 2018-07-18 1.今日导读 在这个信息爆炸的年代,获取知识是一件越来越容易的事情。人们曾经认为,如此的时代进步会给高等教育带来众多便利。但事实的...

aibinxiao
14分钟前
6
0
第15章FTP服务搭建与配置

15.1FTP介绍 FTP多用于Windows传文件到linux rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrzsz rz把 window 上的文件传输到 linux 上 sz 把 linux 上的文件传输到 ...

Linux学习笔记
22分钟前
0
0
OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
26分钟前
6
1
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
45分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部