DYBOY's Blog

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

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

版权声明:《 基于WebSocket的匿名聊天室 》为DYBOY原创文章未经允许不得转载。

 DYBOY
 作者签名:专注程序开发和Web安全,商业合作请联系dyboy2017@qq.com

发表评论:

用心评论~

帅人已评:

凌云
2019-02-01 18:11
啊哈,正是我需要的

2019-01-14 10:21
好东西
心网
2019-01-06 16:33
感谢博主
TOP
Powered by Emlog | Theme:Monkey by DYBOY
渝ICP备16008772号
sitemap