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

利用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不是同一个,这时候需要同步用一个正确的,不然会有一些扩展显示未安装
  3. 解决: 命令行输出 php –ini 查看命令行所用的php.ini路径, 在查看phpinfo() 显示php.ini的路径 ; 把命令的php.ini内容用正确的替代. 问题解决

发表评论

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据