这个聊天室就当作是计算机网络的一个作业了吧
课程上需要做一个socket通信的project,看到C语言写的和PHP的差不多,相对来说,PHP有对象,参考PHP官方文档,写了一下。
因为C版本语言写出来的黑框界面不是特别的好看,BS模式或许更好一点。
0x01 DEMO:
0x02 实现思路
1.了解socket:
关于socket通信,在书上和网上都有不少文章。强烈推荐一篇:《Socket通信原理》
2.设计实现:
既然知道通信过程是一个CS模式,那么就至少需要两种代码:服务端、客户端
(1.)客户端:
连接服务端,发消息给服务端,从服务端接收消息建立连接
处理json数据
人数统计
消息处理,声音提示
前端设计
(2.)服务端:
收发客户端消息,同时对于建立的socket会话做消息转发,同时添加一定的逻辑控制webSocket类
格式标准,广播,在线人数,socket连接、丢弃,异常控制,信息编码,json输出
3.实现基础:
采用BS的模式,基于Browser与服务器,先在本地环境下尝试编写,局域网下以编写程序的主机作为服务端,移动端连接WIFI作为客户端,每一个连上服务端的都是客户端。
0x03 开源地址:
感兴趣的同学可参考!
0x04 项目运行注意事项:
为啥要写这个注意事项呐?主要是为了记一下笔记,踩坑太心酸!
在部署项目到线上需要注意的事项如下:
1. Windows主机部署:需要在php.ini中,找到;extension=php_sockets.dll一句,将前面的;去掉
重启PHP
在cmd下运行php server_anychat.php即可
2. Linux主机:
网上很多什么编译.so文件等等方法,小东尝试过,也是稀里糊涂的,这里推荐大家使用宝塔面板在宝塔面板中直接上传到对应的网站空间
使用xshell远程链接主机,然后输入命令nohup php server_anychat.php &,这样可以将程序挂起,可以一直运行
nohup命令之后,使用命令ps -aux|grep server_anychat.php| grep -v grep | awk '{print $2}'得到进程PID
结束该进程命令kill -9 进程PID
3. 修改部分:部署到自己的服务器,那么需要修改前端idnex.hrml文件中javascript部分var ws = new WebSocket("ws://:9000");中,将链接的改成自己的服务器IP,端口默认9000,需要改端口,则需要改server_anycaht.php中最底部的端口数字9000
4. 宝塔部署的坑:
这个坑,坑了我近乎一个晚上,虽然在睡觉,中午起来调试,发现不运行服务文件,和运行了服务文件,控制台报的错误都是建立连接超时。想到自己的服务器安全组开放了对应的端口,可还是错误。最终在宝塔面板上发现了,原来宝塔面板还有自己的端口控制,有防火墙,没有开放对应的端口,需要在宝塔面板中的安全选下卡中开放对应的端口即可!
5. 题外话:
如果大家觉的运行服务文件比较麻烦,也可以不更改前端中的网址,上传即可使用!