[开源项目]基于WebSocket的匿名聊天室

这个聊天室就当作是计算机网络的一个作业了吧

课程上需要做一个socket通信的project,看到C语言写的和PHP的差不多,相对来说,PHP有对象,参考PHP官方文档,写了一下。

因为C版本语言写出来的黑框界面不是特别的好看,BS模式或许更好一点。

C版本的可参考:https://github.com/shineyr/Socket/tree/master/pthread_socket

预览界面

0x01 DEMO:

http://chat.top15.cn/

0x02 实现思路

1.了解socket:

关于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. 题外话:

如果大家觉的运行服务文件比较麻烦,也可以不更改前端中的网址,上传即可使用!

发表评论 / Comment

用心评论~

金玉良言 / Appraise
EugeneLV 1
2019-04-22 14:56
xss还没修复么.
头像
DYBOY站长已认证
2019-04-30 13:07
@Eugene:也不算修复吧,预留在哪儿,用作后期支持图片等格式,如果需要过滤,这种单体应用直接接入脚本WAF,或者云CDN即可
Cool Ko-jun.LV 1
2019-03-27 11:11
博主我用服务器搭建然后打开网站显示连接不上服务器
头像
DYBOY站长已认证
2019-03-27 16:37
@Cool Ko-jun.:服务器上要运行服务端文件
凌云LV 1
2019-02-01 18:11
啊哈,正是我需要的
LV 1
2019-01-14 10:21
好东西
心网LV 1
2019-01-06 16:33
感谢博主

Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/blog.dyboy.cn/content/templates/dyblog/footer.php:56) in /www/wwwroot/blog.dyboy.cn/include/lib/view.php on line 23