预警数据socket通信,收藏参考
本文转自:https://www.workerman.net/q/7729
本文转自:https://www.workerman.net/q/7729
a.和堆一样存储在计算机 RAM 中。
b.在栈上创建变量的时候会扩展,并且会自动回收。
c.相比堆而言在栈上分配要快的多。
d.用数据结构中的栈实现。
e.存储局部数据,返回地址,用做参数传递。
f.当用栈过多时可导致栈溢出(无穷次(大量的)的递归调用,或者大量的内存分配)。
g.在栈上的数据可以直接访问(不是非要使用指针访问)。
h.如果你在编译之前精确的知道你需要分配数据的大小并且不是太大的时候,可以使用栈。
i.当你程序启动时决定栈的容量上限。
a.和栈一样存储在计算机RAM。
b.在堆上的变量必须要手动释放,不存在作用域的问题。数据可用 delete, delete[] 或者 free 来释放。
c.相比在栈上分配内存要慢。
d.通过程序按需分配。
e.大量的分配和释放可造成内存碎片。
f.在 C++ 中,在堆上创建数的据使用指针访问,用 new 或者 malloc 分配内存。
g.如果申请的缓冲区过大的话,可能申请失败。
h.在运行期间你不知道会需要多大的数据或者你需要分配大量的内存的时候,建议你使用堆。
i.可能造成内存泄露。
stream_bucket_append函数:为队列添加数据
stream_bucket_make_writeable函数:从操作的队列中返回一个数据对象
stream_bucket_new函数:为当前队列创建一个新的数据
stream_bucket_prepend函数:预备数据到队列
stream_context_create函数:创建数据流上下文
stream_context_get_default函数:获取默认的数据流上下文
stream_context_get_options函数:获取数据流的设置
stream_context_set_option函数:对数据流、数据包或者上下文进行设置
stream_context_set_params函数:为数据流、数据包或者上下文设置参数
stream_copy_to_stream函数:在数据流之间进行复制操作
stream_filter_append函数:为数据流添加过滤器
stream_filter_prepend函数:为数据流预备添加过滤器
stream_filter_register函数:注册一个数据流的过滤器并作为PHP类执行
stream_filter_remove函数:从一个数据流中移除过滤器
stream_get_contents函数:读取数据流中的剩余数据到字符串
stream_get_filters函数:返回已经注册的数据流过滤器列表
stream_get_line函数:按照给定的定界符从数据流资源中获取行
stream_get_meta_data函数:从封装协议文件指针中获取报头/元数据
stream_get_transports函数:返回注册的Socket传输列表
stream_get_wrappers函数:返回注册的数据流列表
stream_register_wrapper函数:注册一个用PHP类实现的URL封装协议
stream_select函数:接收数据流数组并等待它们状态的改变
stream_set_blocking函数:将一个数据流设置为堵塞或者非堵塞状态
stream_set_timeout函数:对数据流进行超时设置
stream_set_write_buffer函数:为数据流设置缓冲区
stream_socket_accept函数:接受由函数stream_ socket_server()创建的Socket连接
stream_socket_client函数:打开网络或者UNIX主机的Socket连接
stream_socket_enable_crypto函数:为一个已经连接的Socket打开或者关闭数据加密
stream_socket_get_name函数:获取本地或者网络Socket的名称
stream_socket_pair函数:创建两个无区别的Socket数据流连接
stream_socket_recvfrom函数:从Socket获取数据,不管其连接与否
stream_socket_sendto函数:向Socket发送数据,不管其连接与否
stream_socket_server函数:创建一个网络或者UNIX Socket服务端
stream_wrapper_restore函数:恢复一个事先注销的数据包
stream_wrapper_unregister函数:注销一个URL地址包
#include <stdio.h>
int main(void)
{
int urn[5] = {100,200,300,400,500};
int *ptr1, *ptr2, *ptr3;
ptr1 = urn; //第1个元素地址0x00007ffeefbff470
ptr2 = &urn[2]; //第3个元素地址0x00007ffeefbff478
printf("ptr1 = %p, *ptr1 = %d, &ptr1 = %p\n", ptr1, *ptr1, &ptr1); //ptr1表示第1个元素地址470 第1个元素值100 表示变量ptr1本身的地址460
ptr3 = ptr1 + 4; //批针与整数和相加意思是,整数与指针指向的类型的字节数相乘 再与初始地址相加(16进制)
printf("ptr1+4 = %p, *(ptr1+4) = %d\n", ptr1 + 4, *(ptr1 + 4)); //500的地址480 值500 (4*4=16位)
ptr1++; //自增指针,意思是指针移至下一个元素
printf("ptr1 = %p, *ptrl = %d, &ptr1 = %p\n", ptr1, *ptr1, &ptr1); //200的地址474 200 prt1指针变量自身的地址460
ptr2--; //先获取地址再减
printf("ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n", ptr2, *ptr2, &ptr2); //474 200 ptr2变量自身的变量地址458
--ptr1;
++ptr2;
printf("ptr1 = %p, ptr2 = %p\n", ptr1, ptr2); //470 478
printf("ptr2 = %p, ptr1 = %p, ptr2 - ptr1 = %td\n", ptr2, ptr1, ptr2 - ptr1); //478 470 2(表示2个整形类型的字节)
printf("ptr3 = %p, ptr3 - 2 = %p\n", ptr3, ptr3 - 2); //480 478
return 0;
}
ptr1 = 0x7ffeefbff470, *ptr1 = 100, &ptr1 = 0x7ffeefbff460
ptr1+4 = 0x7ffeefbff480, *(ptr1+4) = 500
ptr1 = 0x7ffeefbff474, *ptrl = 200, &ptr1 = 0x7ffeefbff460
ptr2 = 0x7ffeefbff474, *ptr2 = 200, &ptr2 = 0x7ffeefbff458
ptr1 = 0x7ffeefbff470, ptr2 = 0x7ffeefbff478
ptr2 = 0x7ffeefbff478, ptr1 = 0x7ffeefbff470, ptr2 - ptr1 = 2
ptr3 = 0x7ffeefbff480, ptr3 - 2 = 0x7ffeefbff478
Program ended with exit code: 0
Xcode10.2与macOS运行
。
http://rango.swoole.com/archives/508
PHP Fileinfo extension must be installed/enabled to use Intervention Image.
必须安装扩展 fileInfo
切记。
安装扩展 opcache
切记。php_fileinfo, php_mbstring, php_openssl,
删除被禁用的proc_open
函数。
备份设置:'dump_binary_path' => '/usr/bin/', //BT宝塔
'dump_binary_path' => 'D:\phpstudyV81\Extensions\MySQL5.7.26\bin', //win
权限目录:chmod -R 777 bootstrap/
chmod -R 777 storage/
chmod -R 777 public/
Linux:whereis mysql
查询mysql
路径。
参考:https://www.jianshu.com/p/c692761bbd0d
Window —— HeidiSQL
Mac —— Sequel Ace(Sequel Pro 的升级版)
跨平台: —— TablePlus
本文转自:https://learnku.com/articles/62269
感谢作者的付出!!
products
商品表字段名称 | 描述 | 类型 | 加索引缘由 |
---|---|---|---|
id | 自增长ID | unsigned big int | 主键 |
title | SKU 名称 | varchar | 无 |
description | SKU 描述 | varchar | 无 |
price | SKU 价格 | decimal | 无 |
stock | 库存 | unsigne int | 无 |
product_id | 所属商品 id | unsigne big int | 外键 |
orders
订单表字段名称 | 描述 | 类型 | 加索引缘由 |
---|---|---|---|
id | 自增长ID | unsigned big int | 主键 |
no | 订单流水号 | varchar | 唯一 |
user_id | 下单的用户ID | unsigned big int | 外键 |
address | JSON格式的收货地址 | text | 无 |
total_amount | 订单总金额 | decimal | 无 |
remark | 订单备注 | text | 无 |
paid_at | 支付时间 | datetime, null | 无 |
payment_method | 支付方式 | varchar, null | 无 |
payment_no | 支付平台订单号 | varchar, null | 无 |
refund_status | 退款状态 | varchar | 无 |
refund_no | 退款单号 | varchar, null | 唯一 |
closed | 订单是否已关闭 | tinyint, default 0 | 无 |
reviewed | 订单是否已评价 | tinyint, default 0 | 无 |
ship_status | 物流状态 | varchar | 无 |
ship_data | 物流数据 | text, null | 无 |
extra | 其他额外的数据 | text, null | 无 |
order_sku
订单项目名字段名称 | 描述 | 类型 | 加索引缘由 |
---|---|---|---|
id | 自增长ID | unsigned big int | 主键 |
order_id | 所属订单ID | unsigned big int | 外键 |
product_id | 对应商品ID | unsigned big int | 外键 |
product_sku_id | 对应商品SKU ID | unsigned big int | 外键 |
amount | 数量 | unsigned int | 无 |
price | 单价 | decimal | 无 |
rating | 用户打分 | unsigned int, null | 无 |
review | 用户评价 | text | 无 |
reviewed_at | 评价时间 | timestamp, null | 无 |
https://centrifugal.github.io/centrifugo/
https://www.goeasy.io/
可以参考!