$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数据...相关推荐

  1. android studio连接服务端代码,Android studio - 无法连接到LDAP服务器(示例代码)

    我想在android studio中使用LDAP,我在最新版本中使用UnboundID LDAP SDK for Java. 我使用命令: LDAPConnection ldap = new LDAP ...

  2. java连接access_关于k8s下使用Ingress保持长连接的异常情况排查

    写在前面的话 应某位友人需求,帮整理下工作中的发生的一些值得记录的文章.于是在友人描述后,为其整理为了文章,供大家一起参考探讨. 问题描述 在我们中应用有一个使用到`Http Long Poll`的场 ...

  3. 客户连接多个服务端_Linux 服务端最大并发数是多少?

    (给Linux爱好者加星标,提升Linux技能) 转自:后端技术指南针 1. 开场白 在开始今天的文章之前,先抛一个面试题出来: 你接触过的单机最大并发数是多少? 你认为当前正常配置的服务器物理机最大 ...

  4. 【总结】1212- 石墨文档是如何通过 WebSocket 实现百万长连接的?

    Web 服务端推送技术经过了长轮询.短轮询的发展,最终到 HTML5 标准带来的 WebSocket 规范逐步成为了目前业内主流技术方案.它使得消息推送.消息通知等功能的实现变得异常简单,那么百万级别 ...

  5. 石墨文档是如何通过 WebSocket 实现百万长连接的?

    点击上方关注 前端技术江湖,一起学习,天天进步 Web 服务端推送技术经过了长轮询.短轮询的发展,最终到 HTML5 标准带来的 WebSocket 规范逐步成为了目前业内主流技术方案.它使得消息推送 ...

  6. js根据字符串时分秒获取总秒数和分割时分秒

    起初是因为一些网站的视频没找着时间戳,但是显示了视频的时长时分秒,为了做过滤处理,就想到了获取到视频上显示的的时分秒,进行截取,然后根据秒数判断该视频的时长进行筛选 /*** 分割时分秒字符串* @p ...

  7. WebSocket与http长连接的区别

    前言 事先说明这是鄙人看了一点入门文章总结的粗浅的知识, 并不保证理解完全正确,用来给自己知识梳理用. websocket连接过程概述 WebSocket 建立连接需要先通过一个 http 请求进行和 ...

  8. Linux服务端最大并发数是多少?

    1. 开场白 在开始今天的文章之前,先抛一个面试题出来: 你接触过的单机最大并发数是多少? 你认为当前正常配置的服务器物理机最大并发数可以到多少? 说说你的理解和分析. 思考几分钟,如果你可以有理有据 ...

  9. websocket 连接本地端口_聊聊 WebSocket,还有 HTTP

    还记得曾经风靡一时的 QQ 秀聊天室吗?那时,还在上初.高中的我们,QQ 是最常用的聊天交友工具:而 QQ 秀聊天室的出现打破了只能按条件查找好友的局限性,大家可以随意进入聊天室房间,进行在线聊天.怀 ...

最新文章

  1. AGGCN | 基于图神经网络的关系抽取模型
  2. 智能车竞赛技术报告 | 智能车视觉 - 中原工学院 - 逐鹿 - 分母队
  3. 添加右键菜单_笔记本没有灭屏键?巧在右键菜单添加“关闭显示器”选项
  4. windows 2008R2 无法安装操作系统补丁,或无法安装Sp1升级包的解决办法
  5. Releasing Contexts 释放上下文
  6. 高斯背景建模 matlab,高斯背景建模整理 – 要饭的
  7. 如何动态改变audio的播放的src
  8. Package ‘*****‘ has no installation candidate
  9. Linux 文件系统 软/硬链接文件
  10. FBI 连续第三次发布关于国家黑客利用 Kwampirs 发动全球供应链攻击的警告
  11. 基于JavaScript+css的购物网站项目
  12. express不是内部或外部命令
  13. 闰年2月29天,我们都知道怎样判断,但知道为什么那样做吗?
  14. ESXI升级或降级HBA驱动
  15. 域、域树、域林、根域
  16. 在运维日常工作过程中遇到的一些问题,以及最终的解决方法!!(持续更新帖)
  17. iOS日历攻略:提醒调休并过滤法定节假日
  18. 002产品经理用户访谈和问卷调查的目的和设计步骤
  19. Android 7.0修改分辨率,三星S7升级Android7.0 可调节屏幕分辨率
  20. 用户体验的要素pdf_好的用户体验应该具备四要素

热门文章

  1. freemarker的测试结果框架_java必背综合知识点总结(框架篇)
  2. python中的数字类型格式与运算,python数字数据类型
  3. MySQL 中日志的面试题总结
  4. 前端控件JQuery Datatables使用——常用功能初始化
  5. 字符串的模式匹配--BF算法KMP算法
  6. Vuetable-2使用全纪录
  7. kali装电脑_教你Kali Linux怎么安装Nessus软件
  8. db2 jdbc驱动参数_JDBC详细整理(一)
  9. lambda的java_一分钟搞明白java8中的lambda
  10. 中国上海量子计算机,首台光量子计算机在上海亮相