利用websocket 于PHP 进行实时数据更新

HTTP协议的特性:属于“请求-响应”模型,只有客户端发起了请求消息,服务器才能给出响应消息,没有请求,就没有响应;一个请求消息,服务器只能返回一个响应消息。有些特殊应用场景中,如“在线股票”、“聊天室”等,需要模拟呈现出“客户端不发请求,服务器也在不停的给出响应”效果,若使用HTTP协议,只能使用“AJAX+定时器”来近似的实现——心跳请求,问题:心跳过慢则信息的实效性差,心跳过快则服务器压力太大!

WebSocket协议的特性:属于“广播-收听”模型,只要客户端连接到服务器上,就不再断开(永久连接),一方可以不停的给对方发消息,对方可以不给出响应。使用WS协议代替心跳请求,可以非常好的解决HTTP协议在某些应用中的不足。WS协议的服务器也有不足:永久连接限制了客户端的数量。

业务场景:

有更新的数据,会同步写到redis队列中,前端需要实时去更新页面展示内容,WS服务端会刷队列取数据给到前端

WebSocket应用程序必需两个程序:

socket_client.html
socket_server.php

WS服务器端程序:

socket_server.php

(如果有socket 扩展并且是开启状态的可以略过)

  1. 在官方的php.tar 或 php.gz包 里面有ext文件夹 里面有扩展的安装包(mamp环境的可以放到/Applications/MAMP/bin/php/php5.6.28/include/ 目录下)
  2. ## MAC安装php默认安装位置在/usr/local/php里面(如果自己装了php找到对应目录)
  3. cd /Applications/MAMP/bin/php/php5.6.28/include/
  4. /usr/local/php/bin/phpize ##这一步是php化
  5. ./configure --prefix=/Applications/MAMP/bin/php/php5.6.28 --with-php-config=/Applications/MAMP/bin/php/php5.6.28/bin/php-config --enable-sockets(地址需要根据自己的实际地址进行更换)
  6. make && make install ## 会提示安装好了sockets.so到/Applications/MAMP/bin/php/php5.6.28/lib/php/extensions/no-debug-non-zts-20131226中
  7. ## 接下来打开php.ini
  8. /sockets
  9. 找到;extension=sockets.so 把注释去掉,如果没有 extension=sockets.so 加上
  10. 然后重启web服务器 
  11. php -m 查看是否存在sockets扩展

安装好扩展之后用命令行执行

  1. php socket_server.php (执行调用PHP解释器,执行PHP语言编写的Socket服务器程序)

  2.  

    注:这里可能有一个问题,命令行执行的时候,可能跟浏览器访问时候用的php.ini不是同一个,这时候需要同步用一个正确的,不然会有一些扩展显示未安装。

    解决:命令行输出 php --ini 查看命令行所用的php.ini 路径;在查看phpinfo()显示php.ini的路径;把命令的php.ini内容用正确的替代。问题解决

WS客户端程序:

socket_client.html

redis代码

redis_server.php

代码已上传github 奉上地址:https://github.com/869051375/socket

欢迎下载,请求指正错误。

 

相关推荐
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页