php ini 长连接秒数,php使用webSocket实现Echarts长连接自动刷新的解决方案(2):后端服务端代码返回json数据...
$address = "127.0.0.1";
$port = 9090; //调试的时候,可以多换端口来测试程序!
set_time_limit(0);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_block($sock);
socket_bind($sock, $address, $port);
socket_listen($sock, 4);
do {
echo "Waiting for Connection...\n";
$msgsock = socket_accept($sock);
echo "Waiting for Request...\n";
$buf = socket_read($msgsock, 8192);//读取请求
echo "Request Received: $buf\n";
$response = hand_shake($buf);
socket_write($msgsock, $response, strlen($response)); //发送响应
//开始通信...
$buf = socket_read($msgsock, 8192); //获取前端发送的消息
//返回json数据;
if (unmask($buf) == 'getPeerInfo') {
$msg = '[
{
"vid": "1",
"vname": "杨过",
"vdata": "20.00",
"vtask": "70.00"
},
{
"vid": "2",
"vname": "小龙女",
"vdata": "40.00",
"vtask": "100.00"
},
{
"vid": "3",
"vname": "郭靖",
"vdata": "40.00",
"vtask": "100.00"
},
{
"vid": "4",
"vname": "黄蓉",
"vdata": "30.00",
"vtask": "100.00"
},
{
"vid": "5",
"vname": "欧阳锋",
"vdata": "90.00",
"vtask": "100.00"
},
{
"vid": "6",
"vname": "洪七公",
"vdata": "90.00",
"vtask": "100.00"
},
{
"vid": "7",
"vname": "黄老邪",
"vdata": "68.00",
"vtask": "90.00"
},
{
"vid": "8",
"vname": "一灯大师",
"vdata": "30.00",
"vtask": "79.00"
},
{
"vid": "9",
"vname": "老顽童",
"vdata": "89.00",
"vtask": "98.00"
},
{
"vid": "10",
"vname": "郭襄",
"vdata": "69.00",
"vtask": "96.00"
}]';
$response_text = mask($msg);
socket_write($msgsock, $response_text, strlen($response_text));
} else {
//这里不建议用array,因为json_encode之后出现空值,可能是编码问题。
//一旦编码出问题,就是返回空,又不报错
$msg = '{"error:"Invalid method"}';
$response_text = mask(json_encode($msg));
socket_write($msgsock, $response_text, strlen($response_text));
};
socket_close($msgsock);
} while (true);
socket_close($sock);
function hand_shake($buf)
{
$buf = substr($buf, strpos($buf, 'Sec-WebSocket-Key:') + 18);
$key = trim(substr($buf, 0, strpos($buf, "\r\n")));
$new_key = base64_encode(sha1($key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
$new_message = "HTTP/1.1 101 Switching Protocols\r\n";
$new_message .= "Upgrade: websocket\r\n";
$new_message .= "Sec-WebSocket-Version: 13\r\n";
$new_message .= "Connection: Upgrade\r\n";
$new_message .= "Sec-WebSocket-Accept: " . $new_key . "\r\n\r\n";
return $new_message;
}
//解码数据
function unmask($text)
{
$length = ord($text[1]) & 127;
if ($length == 126) {
$masks = substr($text, 4, 4);
$data = substr($text, 8);
} elseif ($length == 127) {
$masks = substr($text, 10, 4);
$data = substr($text, 14);
} else {
$masks = substr($text, 2, 4);
$data = substr($text, 6);
}
$text = "";
for ($i = 0; $i < strlen($data); ++$i) {
$text .= $data[$i] ^ $masks[$i % 4];
}
return $text;
}
function mask($text)
{
$b1 = 0x80 | (0x1 & 0x0f);
$length = strlen($text);
if ($length <= 125)
$header = pack('CC', $b1, $length);
elseif ($length > 125 && $length < 65536)
$header = pack('CCn', $b1, 126, $length);
elseif ($length >= 65536)
$header = pack('CCNN', $b1, 127, $length);
return $header . $text;
}
php ini 长连接秒数,php使用webSocket实现Echarts长连接自动刷新的解决方案(2):后端服务端代码返回json数据...相关推荐
- android studio连接服务端代码,Android studio - 无法连接到LDAP服务器(示例代码)
我想在android studio中使用LDAP,我在最新版本中使用UnboundID LDAP SDK for Java. 我使用命令: LDAPConnection ldap = new LDAP ...
- java连接access_关于k8s下使用Ingress保持长连接的异常情况排查
写在前面的话 应某位友人需求,帮整理下工作中的发生的一些值得记录的文章.于是在友人描述后,为其整理为了文章,供大家一起参考探讨. 问题描述 在我们中应用有一个使用到`Http Long Poll`的场 ...
- 客户连接多个服务端_Linux 服务端最大并发数是多少?
(给Linux爱好者加星标,提升Linux技能) 转自:后端技术指南针 1. 开场白 在开始今天的文章之前,先抛一个面试题出来: 你接触过的单机最大并发数是多少? 你认为当前正常配置的服务器物理机最大 ...
- 【总结】1212- 石墨文档是如何通过 WebSocket 实现百万长连接的?
Web 服务端推送技术经过了长轮询.短轮询的发展,最终到 HTML5 标准带来的 WebSocket 规范逐步成为了目前业内主流技术方案.它使得消息推送.消息通知等功能的实现变得异常简单,那么百万级别 ...
- 石墨文档是如何通过 WebSocket 实现百万长连接的?
点击上方关注 前端技术江湖,一起学习,天天进步 Web 服务端推送技术经过了长轮询.短轮询的发展,最终到 HTML5 标准带来的 WebSocket 规范逐步成为了目前业内主流技术方案.它使得消息推送 ...
- js根据字符串时分秒获取总秒数和分割时分秒
起初是因为一些网站的视频没找着时间戳,但是显示了视频的时长时分秒,为了做过滤处理,就想到了获取到视频上显示的的时分秒,进行截取,然后根据秒数判断该视频的时长进行筛选 /*** 分割时分秒字符串* @p ...
- WebSocket与http长连接的区别
前言 事先说明这是鄙人看了一点入门文章总结的粗浅的知识, 并不保证理解完全正确,用来给自己知识梳理用. websocket连接过程概述 WebSocket 建立连接需要先通过一个 http 请求进行和 ...
- Linux服务端最大并发数是多少?
1. 开场白 在开始今天的文章之前,先抛一个面试题出来: 你接触过的单机最大并发数是多少? 你认为当前正常配置的服务器物理机最大并发数可以到多少? 说说你的理解和分析. 思考几分钟,如果你可以有理有据 ...
- websocket 连接本地端口_聊聊 WebSocket,还有 HTTP
还记得曾经风靡一时的 QQ 秀聊天室吗?那时,还在上初.高中的我们,QQ 是最常用的聊天交友工具:而 QQ 秀聊天室的出现打破了只能按条件查找好友的局限性,大家可以随意进入聊天室房间,进行在线聊天.怀 ...
最新文章
- AGGCN | 基于图神经网络的关系抽取模型
- 智能车竞赛技术报告 | 智能车视觉 - 中原工学院 - 逐鹿 - 分母队
- 添加右键菜单_笔记本没有灭屏键?巧在右键菜单添加“关闭显示器”选项
- windows 2008R2 无法安装操作系统补丁,或无法安装Sp1升级包的解决办法
- Releasing Contexts 释放上下文
- 高斯背景建模 matlab,高斯背景建模整理 – 要饭的
- 如何动态改变audio的播放的src
- Package ‘*****‘ has no installation candidate
- Linux 文件系统 软/硬链接文件
- FBI 连续第三次发布关于国家黑客利用 Kwampirs 发动全球供应链攻击的警告
- 基于JavaScript+css的购物网站项目
- express不是内部或外部命令
- 闰年2月29天,我们都知道怎样判断,但知道为什么那样做吗?
- ESXI升级或降级HBA驱动
- 域、域树、域林、根域
- 在运维日常工作过程中遇到的一些问题,以及最终的解决方法!!(持续更新帖)
- iOS日历攻略:提醒调休并过滤法定节假日
- 002产品经理用户访谈和问卷调查的目的和设计步骤
- Android 7.0修改分辨率,三星S7升级Android7.0 可调节屏幕分辨率
- 用户体验的要素pdf_好的用户体验应该具备四要素
热门文章
- freemarker的测试结果框架_java必背综合知识点总结(框架篇)
- python中的数字类型格式与运算,python数字数据类型
- MySQL 中日志的面试题总结
- 前端控件JQuery Datatables使用——常用功能初始化
- 字符串的模式匹配--BF算法KMP算法
- Vuetable-2使用全纪录
- kali装电脑_教你Kali Linux怎么安装Nessus软件
- db2 jdbc驱动参数_JDBC详细整理(一)
- lambda的java_一分钟搞明白java8中的lambda
- 中国上海量子计算机,首台光量子计算机在上海亮相