这个聊天室就当作是计算机网络的一个作业了吧
课程上需要做一个socket
通信的project
,看到C语言写的和PHP
的差不多,相对来说,PHP
有对象,参考PHP官方文档,写了一下。
因为C版本语言写出来的黑框界面不是特别的好看,BS
模式或许更好一点。
C版本的可参考:https://github.com/shineyr/Socket/tree/master/pthread_socket
0x01 DEMO:
0x02 实现思路
1.了解socket:
关于socket
通信,在书上和网上都有不少文章。强烈推荐一篇:《Socket通信原理》
2.设计实现:
既然知道通信过程是一个CS模式
,那么就至少需要两种代码:服务端、客户端
(1.)客户端:
连接服务端,发消息给服务端,从服务端接收消息
- 建立连接
- 处理
json
数据 - 人数统计
- 消息处理,声音提示
- 前端设计
(2.)服务端:
收发客户端消息,同时对于建立的socket
会话做消息转发,同时添加一定的逻辑控制
webSocket
类- 格式标准,广播,在线人数,
socket
连接、丢弃,异常控制,信息编码,json输出
3.实现基础:
采用BS
的模式,基于Browser
与服务器,先在本地环境下尝试编写,局域网下以编写程序的主机作为服务端,移动端连接WIFI
作为客户端,每一个连上服务端的都是客户端。
0x03 开源地址:
感兴趣的同学可参考!
Github: https://github.com/dyboy2017/AnyChat
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://chat.top15.cn:9000");
中,将链接的chat.top15.cn
改成自己的服务器IP
,端口默认9000
,需要改端口,则需要改server_anycaht.php
中最底部的端口数字9000
4. 宝塔部署的坑:
这个坑,坑了我近乎一个晚上,虽然在睡觉,中午起来调试,发现不运行服务文件,和运行了服务文件,控制台报的错误都是建立连接超时。想到自己的服务器安全组开放了对应的端口,可还是错误。最终在宝塔面板上发现了,原来宝塔面板还有自己的端口控制,有防火墙,没有开放对应的端口,需要在宝塔面板中的安全选下卡中开放对应的端口即可!
5. 题外话:
如果大家觉的运行服务文件比较麻烦,也可以不更改前端中的网址,上传即可使用!
版权声明:《 [开源项目]基于WebSocket的匿名聊天室 》为DYBOY原创文章,转载请注明出处!
最后编辑:2018-12-21 22:12:37
2019-04-22 14:56
2019-04-30 13:07
2019-03-27 11:11
2019-03-27 16:37
2019-02-01 18:11
2019-01-14 10:21
2019-01-06 16:33