- 浏览: 1075261 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (290)
- php (65)
- javascript (36)
- html5 (31)
- thinkphp (9)
- mysql (16)
- jquery (13)
- node.js (9)
- css (9)
- android 开发 (8)
- flex (5)
- java (3)
- apache (8)
- linux (8)
- git (5)
- web (5)
- wordpress (9)
- mongodb (2)
- redis (5)
- yaf (6)
- python (4)
- big data (1)
- sphinx (1)
- html (1)
- bootstrap (1)
- vue (1)
- laravel (1)
- test (0)
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
如何解决非IE浏览器的web打印 -
flashbehappy:
同一个视频,有mp4,ogg两种格式的。在chrome,fir ...
firefox chrom safari 对video标签的区别 -
xmdxzyf:
可以在网站(www.sosoapi.com)上试下在线表单方式 ...
用swagger-php/ui做API测试 -
flex_莫冲:
a2631500 写道"看了源码,设置Backbon ...
backbone与php交互 -
a2631500:
"看了源码,设置Backbone.emulateJS ...
backbone与php交互
cli code
socket server code
socket client code
#!/bin/bash filepath=$(cd "$(dirname "$0")"; pwd) cd $filepath #running status:sso.lock,stop status:ssostop.lock TMPFILE=$filepath/sso.lock STOPFILE=$filepath/ssostop.lock runCLI(){ touch $TMPFILE echo "sso server process started.\n" logname="sso_"$(date +%Y%m%d); su www-data -c "php index.php sso start 1>>./Log/$logname.log 2>&1" rm -f $STOPFILE; } restartCLI(){ stopCLI echo "Waiting for stop sso process." sleep 1 echo "Exit prev sso process." runCLI & } stopCLI(){ if [ -f $TMPFILE ];then touch $STOPFILE fi rm -f ${TMPFILE}; logname="sso_"$(date +%Y%m%d); su www-data -c "php index.php sso stop 1>>./Log/$logname.log 2>&1" echo "Sent stop sso server signal." } if [ "$1" = "-stop" ] ;then stopCLI elif [ "$1" = "-start" -o "$1" = "" ] ;then if [ -f $TMPFILE ];then echo "Another process is running." else runCLI & fi elif [ "$1" = "-restart" ] ;then restartCLI else echo "Please select option -start -restart -stop" fi
socket server code
<?php namespace Admin\Action; use Think\Action; class SsoAction extends Action { private $sock; private $clients = array(); // 停止socket。kill 后,有可能socket临时文件还是没删除。会导致同一个端口无法启动 //check port status:netstat -ano |grep port //search pid: lsof -i:port //kill pid //rm -f sso.lock public function run($taskType) { switch ($taskType) { case 'start': $this->_start(); break; default: echo datetime() . " unknow task type!" . PHP_EOL; break; } } public function index() { echo datetime() . " server msg: ". $_SERVER['argv'][1] . " " . $_SERVER['argv'][2] . PHP_EOL; $this->run($_SERVER['argv'][2]); } private function _start() { set_time_limit(0); ob_implicit_flush(); if (($this->sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo datetime() . " socket_create() failed: reason:" . socket_strerror(socket_last_error()) . "\n"; exit; } // start if (socket_bind($this->sock, C('SSO_ADDRESS'), C('SSO_PORT')) === false) { echo datetime() . " socket_bind failed, reason:" . socket_strerror(socket_last_error($sock)) . PHP_EOL; exit; } // listen if (socket_listen($this->sock, 5) === false) { echo datetime() . " socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . PHP_EOL; exit; } echo datetime() . " start socket server success!" . PHP_EOL; do { // accept socket msg failed if (($msgsock = socket_accept($this->sock)) === false) { echo datetime() . " socket_accepty() failed :reason:" . socket_strerror(socket_last_error($this->sock)) . PHP_EOL; break; } //read client message $buf = socket_read($msgsock, 1024); $data = json_decode($buf, true); $userID = $data['userID']; if ($data['msg'] == 'logout') { // clear session table $this->_logout($userID); } elseif ($data['msg'] == "check") { // check cache with user ID $back = S($userID) ? "success" : "fail"; echo datetime() . " no cache of {$userID} " . PHP_EOL; if (false === socket_write($msgsock, $back)) { echo datetime() . " socket_write() failed reason:" . socket_strerror(socket_last_error($this->sock)) . PHP_EOL; } } socket_close($msgsock); } while (true); } private function _logout($userID) { if (!$userID) return false; S($userID, null); echo datetime() . " userID:{$userID} logout by client. " . PHP_EOL; } } ?>
socket client code
<?php namespace Admin\Action; use Think\Action; use Org\Util\Socket; class SsoClientAction extends Action { private $SocketClient; /** * loop check sso server auth status */ public function run() { $result = true; while($result===true) { $this->_connect(); $result = $this->send(); if (!$result) { // logout session_destroy(); } sleep(3); } //$this->_connect(); //$result = $this->send(); } private function _connect() { $config = array('persistent' => false, 'host' => C("SSO_ADDRESS"), 'protocol' => 'tcp', 'port' => C("SSO_PORT"), 'timeout' => 5); $this->SocketClient = new Socket($config); $this->SocketClient->connect(); } /** * @param msg check or logout string */ public function send($msg="check") { $userID = $_SESSION[C('USER_AUTH_KEY')]; if (!$userID) $msg = "logout"; $arr = array("msg"=>$msg, $userID=>$userID); $data = json_encode($arr); $result = $this->SocketClient->write($data); //echo datetime() . " send msg:{$msg} \r\n" . PHP_EOL; $response = $this->SocketClient->read(); echo datetime() . " " . $response . " from sso server \r\n" . PHP_EOL; $this->SocketClient->disconnect(); if ($response == "logout" || $response == "fail") { echo datetime . " logout or fail \r\n" . PHP_EOL; session_destroy(); return false; } return true; } } ?>
发表评论
-
将博客搬至CSDN
2017-03-28 09:07 495将博客搬至CSDN,尽情期待 -
laravel入門
2017-03-03 16:31 5421 全局安裝 composer global require ... -
导出csv,excel等文件,文件内容错误的问题,需要加上ob_end_clean
2017-03-02 11:54 1451见这个问题: http://stackoverflow.com ... -
facebook graph api从2.6转到2.8的问题处理
2017-02-15 16:30 935之前一直用facebook 2.6的api,现在想升级到2.8 ... -
php从mysql读取超过200W行的表
2017-01-04 10:09 551需要从一个大表,如user表中读取所有user数据再做整理并導 ... -
一个session失效的伪命题
2016-12-08 18:33 650最近遇到一个问题,一个ajax请求会调用已存在的session ... -
tp5与tp3的区别
2016-11-21 14:33 1476TP5作了很大的改变,更加灵活,没那么臃肿了,加入了一些令人振 ... -
推送消息能不能区分禁止通知和卸载两种类型?
2016-11-18 10:54 1359消息推送ios用了apns,android用的是gcm。推送失 ... -
yaf在命令行模式下出现PHP Fatal error: Class 'Yaf_Application' not found的解决办法
2016-11-11 16:42 2301为了跑个yaf的crontab,执行时报错: PHP Fata ... -
推送emoji表情乱码的解决方法
2016-11-04 17:44 1878推送内容如果包含了emoji表情,需要做以下修改 1 mysq ... -
YAF访问图片等静态资源禁止调用YAF框架的解决办法
2016-10-20 17:55 1565当访问yafpublic 目录下的某个静态资源时,依然会访问y ... -
在线自动协同编辑文本的实现方案
2016-10-14 16:49 1904要实现可以自动在线协同编辑文本的功能。就类似google do ... -
Paypal支付跳转失败的原因及解决办法
2016-09-18 14:27 3493遇到在跳转到paypal支付页面的时候出现502 bad ga ... -
文件格式不是unix导致sed,cat等读取文件后无法正常退出
2016-08-30 14:44 704#!/bin/bash bucket_config=&quo ... -
varnish的使用和PHP清除缓存的技巧
2016-08-11 14:10 1214官網地址 https://www.varnish-cache. ... -
TP在APP_DEBUG=false的情況下,CLI和WEBSITE會共用同一個~runtime.php導致出錯的問題解決辦法
2015-12-14 11:43 774TP若使用了 define('APP_DEBU ... -
node.js获取php curl post数据req.body为空的处理
2015-09-22 11:43 3868node使用了express4和body-parser来解析p ... -
yaf namespace的使用
2015-08-27 11:32 2247yaf支持namespace。在php.ini 中添加 yaf ... -
yaf 添加phpunittest
2015-08-21 11:16 560首先要讓php在cli下支持yaf wamp下打開D:/wam ... -
TP的module支持中文
2015-05-20 14:06 1191為了讓URL支持中文,例如www.xxx.com/廣州/xx ...
相关推荐
基于 elementui + thinkphp6 + phpsocket.io的单商户客服系统源码 基于 elementui + thinkphp6 + phpsocket.io的单商户客服系统源码 基于 elementui + thinkphp6 + phpsocket.io的单...
亲测thinkphp3.1.3完美支持php7
Thinkphp 使用Dompdf
thinkphp5 js中显示php变量.docx
因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。
Thinkphp做的阿里云OSS后台,PHP全套代码,Thinkphp3.2整合阿里云OSS图片,thinkphp3.2实现图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了。...
ThinkPHP整合phpqrcode生成二维码DEMO
TP3.1 默认是不支持php7的,这份框架代码已修改支持php最新版 7.0、7.1、7.2 主要修改其中几个已经废弃的几个函数为PHP7支持的函数用于代替使用,不影响效率,经测试函数执行效率依然比旧版本更高
使用ThinkPHP,你可以更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单、兼容和快速的特性中受益。简洁、快速和实用是ThinkPHP发展秉承的宗旨,为此ThinkPHP会不断...
搭建nginx+php+openssl+thinkphp时使用的证书
thinkphp6使用workerman websocket连接
PHPSocket.IO是基于workerman开发的php版本的socket.IO服务。可用于服务器消息的推送、聊天室、客服系统的开发 使用环境: thinkphp5.0 项目需求 前端下单,后台接受,并立即做出提示。例如:美团外卖,客户端下单...
thinkphp6利用workerman实现一对一聊天,包含聊天列表页面和一对一聊天界面,信息实时推送,实时显示未读信息数量。(用navicat将chat.sql文件导入,配置数据库链接,html文件内修改ip和域名,修改api/chat内的域名...
thinkphp内使用soap 把下载的soap解压放到ThinkPHP\Extend\Vendor目录下 名字是soap 调用方法: function test($url,$method,$data){ vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件 $...
请使用宝塔面板安装 上传源码并且解压到网站很目录 设置运行目录为public 测试环境为php5.6 mysql5.5 伪静态选择为thinkphp 宝塔 安全 放通: 2080 , 9090 这两个端口 步骤2 上方操作完毕后 创建个数据库 ...
thinkphp使用jpgraph实例,防止新手陷入误区
thinkphp使用mpdf将html导出为pdf文件。里面包含了mpdf资源包。包版本为6.1.3。适合php5.6.27使用,新版本的mpdf需要php7的支持。
thinkphp5整合phpexcel,phpqrcode,phpmailer,thinkphp5整合phpexcel,phpqrcode,phpmailer
thinkphp-3.1.2.zip是源版本未修复的 Base为在thinkphp3.1.2源版本基本上修复PHP7.0兼容性的文件夹 ├── Base │ ├── Common │ │ └── common.php │ └── Lib │ ├── Behavior │ │ ...
帮助你完成php程序对redis的支持,其中分别包含在linux和windows系统中如何一步步完成php_redis扩展安装的步骤和所需资源,最后我再结合Thinkphp3.2把redis整合进tp框架的Cache中,这样更方便的使用tp中S()方法直接...