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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php swoole udp,基于Swoole如何搭建UDP服务?

本节将会讲解如下2个问题&#xff1a;通过Swoole如何搭建UPD服务&#xff1f;对比TCP和UDP有什么不同&#xff1f;01通过Swoole如何搭建UPD服务新建一个文件命名为 udp_server.php&#xff0c;代码如下&#xff1a;在命令行执行如下命令就可以开启TCP服务&#xff1a;php udp_s…

php net-snmp trap,Net-snmp:接收Trap的api

Net-snmp:接收Trap的apiNet-snmp:接收Trap的apinet-snmp使用的是snmptrapd来接收trap&#xff0c;我想自己写程序接收trap&#xff0c;也看了snmptrapd.c代码&#xff0c;很繁琐。有没有更简单一点的例子。net-snmp作为管理端功能有点欠缺&#xff0c;可以使用snmp毕业论文-- B…

SpringBoot引入本地jar包

1.引入本地jar包并通过maven打包成jar包 第一步&#xff1a;创建lib包&#xff0c;将所需的本地jar包导入 第二步&#xff1a;在pom文件中引导路径 <dependency><groupId>com.penn</groupId><artifactId>excleutil</artifactId><version&g…

“2021-01-30T16:00:00.000Z“: expected format “yyyy-MM-dd HH:mm:ss“时间戳格式化

“2021-01-30T16:00:00.000Z”&#xff1a; T表示分隔符&#xff0c;Z表示的是UTC. UTC&#xff1a;世界标准时间&#xff0c;在标准时间上加上8小时&#xff0c;即东八区时间&#xff0c;也就是北京时间。 例如 &#xff1a; 北京时间&#xff1a;2021-01-31 00:00:00对应的国…

MyBatis JdbcType介绍

MyBatis JdbcType介绍 JdbcType介绍 数据库列字段都是有类型的&#xff0c;不同的数据库有不同的类型。为了表示这些数据类型&#xff0c;Java源码是采用枚举来定义的&#xff1a; public enum JDBCType implements SQLType {TINYINT(Types.TINYINT),SMALLINT(Types.SMALLIN…

php 物联网应用,蜂窝物联网的概念以及应用

所谓蜂窝物联网&#xff0c;就是蜂窝移动通信网物联网相结合的发展产物。如今蜂窝移动通信网络已经发展30多年了&#xff0c;高高的通信铁塔拔地而起&#xff0c;随处可见&#xff0c;比工业时代的烟囱可多多了&#xff0c;象征着辉煌的信息时代。蜂窝物联网建设原则 本期工程要…

JSONObject.parseObject()

java获取json中某个字段 import com.alibaba.fastjson.JSONObject; public class JsonTest {public static void main(String[] args) {// json串(以自己的为准)String str "{"id":"75","shoppingCartItemList":[{"id":"4…

python批量图片转pdf,用python 制作图片转pdf工具

最近因为想要看漫画&#xff0c;无奈下载的漫画是jpg的格式&#xff0c;网上的转换器还没一个好用的&#xff0c;于是乎就打算用python自己DIY一下&#xff1a;这里主要用了reportlab。开始打算随便写几行&#xff0c;结果为若干坑纠结了挺久&#xff0c;于是乎就想想干脆把代码…

Java中如何遍历Map对象的4种方法

在Java中如何遍历Map对象 *How to Iterate Over a Map in Java* 在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。 既然java中的所有map都实现了Map接口&#xff0c;以下方法适用于任何map实现&#xff08;HashMap, TreeMap, LinkedHashMap, Hashtable, 等…

大学本科 java教材,大学本科自学java之路——IO

大学本科自学java之路——IO大学本科自学java之路——IO我现在大三&#xff0c;大一&#xff0c;大二就是玩&#xff0c;现在大三准备考虑就业了&#xff0c;特写博客便于坚持自己学习一. 字节缓冲流的构造方法&#xff1a;BufferedOutputStream:该类实现缓冲输出流。 通过设置…

Map的value转化为其它类型

map的values() Collection<String> v map.values(); 转化为数组或者List集合 转化为List: List<String> lnew ArrayList<String>(map.values()); for(String s:l){System.out.print(s); }转化为数组 1.直接为Object[]数组 Object[] array map.values(…

下载的oracle如何解压,深度概述Ubuntu oracle下载解压

oracle经过长时间的发展&#xff0c;我发表对Ubuntu oracle个人讲解&#xff0c;叙述下Ubuntu oracle使用。Ubuntu 包含了非常好的翻译和容易使用的架构&#xff0c;这些由自由软件社团将不断的提供, 将尽可能的使大多数人方便使用 Ubuntu 。1. 先到 Ubuntu oracle 网站上下载了…

关于比较器Comparator排序时间的问题

​ 最近涉及一个需要按照时间排序的问题&#xff0c;由于在数据库层面order by太麻烦&#xff0c;所以就准备在代码层面解决&#xff0c;但是过程中遇到了一个很有意思的问题。 ​ 先介绍一下用的比较器的api&#xff1a; o1大于o2,则返回正数&#xff1b;o1等于o2,则返回0&…

Error running ‘transmission‘: Unable to open debugger port (127.0.0.1:52469): java.net.SocketExcepti

IDEA运行tomcat启动项目时报错。 开始还以为是这里的端口被占用的问题 然而实际上是tomcat的JMX端口的问题&#xff0c;将端口修改一下&#xff0c;就可以完美启动。 修改之后即可启动项目

oracle 11g 环境,Linux彻底清理Oracle 11g RAC环境方案

参考文档&#xff1a;Linux环境下11.2.0.3 rac的快速卸载脚本在Oracle 11.1和Oracle 10.1,10.2上&#xff0c;都是官方提供手工清理RAC环境的方法的(比如环境有问题&#xff0c;或者RAC安装失败&#xff0c;要清理后重新安装。虽然这些版本&#xff0c;也提供了卸载脚本&#x…

oracle常用用户权限,oracle创建新用户及授予常用权限

创建用户create user usernameidentified by usernamedefault tablespace tablespace_name;授予一般权限grant connect,resource,create any table,drop any table,create sequence,select any table, create any index, drop any index,alter any trigger, create any trigger…

synchronized 锁升级过程

synchronized 锁升级过程就是其优化的核心&#xff1a;偏向锁 -> 轻量级锁 -> 重量级锁 class Test{private static final Object object new Object(); public void test(){synchronized(object) {// do something } }}每个对象创建时都有各自的对象头&#…

oracle数据泵索引创建慢,IMPDP 很慢的原因探究

最近帮一个客户做数据迁移测试&#xff0c;数据库版本的10.2.0.4.0&#xff0c;操作系统是AIX到Linux&#xff0c;采用EXPDP/IMPDP方式进行全库导出和导入。客户的数据库有3.6T&#xff0c;导出时间花了30小时&#xff0c;但是导入却花了120小时&#xff0c;这个很不正常。因为…

Collections.synchronizedList使用

Collections.synchronizedList使用 1.SynchronizedList类具体代码&#xff1a; static class SynchronizedList<E>extends SynchronizedCollection<E>implements List<E> {private static final long serialVersionUID -7754090372962971524L;final List&l…

oracle提交数据按键,Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link)...

Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link)有没有办法只通过数据库链接而不是当前会话的数据提交在表上插入/更新的数据&#xff1f; 或者他们被认为是同一个&#xff1f;例如&#xff1a;INSERT INTO main_database.main_table(value1, valu…