SRS流媒体服务器搭建
太懒了,直接拷贝网址备份吧。
https://www.ossrs.net/releases/
https://www.bilibili.com/video/BV1844y1L7dL/
太懒了,直接拷贝网址备份吧。
https://www.ossrs.net/releases/
https://www.bilibili.com/video/BV1844y1L7dL/
比较详细文章,向作者致敬!
https://www.jianshu.com/p/3b5d7d493855
决定到底让 CPU
执行哪个协程的代码决断过程就是协程调度
,调度的策略是什么?
首先,在执行某个协程代码的过程中发现这行代码遇到了 Co::sleep()
或者产生了网络 IO
,例如 MySQL->query()
,这肯定是一个耗时的过程,Swoole
就会把这个 Mysql
连接的 Fd
放到 EventLoop
中。
CPU
给其他协程使用:即 yield
(挂起)MySQL
数据返回后就继续执行这个协程:即 resume
(恢复)其次,如果协程的代码有 CPU
密集型代码,可以开启 enable_preemptive_scheduler
,Swoole
会强行让这个协程让出 CPU
。
摘自:https://wiki.swoole.com/#/coroutine?id=协程调度
在使用php
的过程中,我们常常需要去添加一些PHP
扩展库。但是重新对php进行编译是比较蛮烦的,所以这时候我们可以使用phpize
对php
进行添加扩展。并且phpize
编译的扩展库可以随时启用或停用,比较灵活。
extention为要挂载的扩展包
1.wget extension.tar.gz下载相应的扩展包并解压。
2.cd extension/切换到扩展extension的目录中
3./php/bin/phpize 运行php安装目录下的phpize文件,这时候会在extension目录下生成相应的configure文件。
4./configure --with-php-config=/php/bin/php-config 运行配置,如果你的服务器上只是装了一个版本的php则不需要添加--with-php-config
。后面的参数只是为了告诉phpize要建立基于哪个版本的扩展。
5.make && make install 编译模块编译好模块之后,需要让php启用它。在php.ini文件中加入把extension.so开启即可。重启php服务。
其实phpize
是一个运行脚本,主要作用是检测php
的环境还有就是在特定的目录生成相应的configure
文件,这样make
install
之后,生成的.so
文件才会自动加载到php
扩展目录下面。
转自:https://www.cnblogs.com/houss/p/11341280.html
//...
const onLoad = async () => {
try {
//1.异步调用接口取服务端数据
const params = {
id: props.category.id,
pageNumber: state.pageNumber || 1,
};
const { data } = await getArticle(params);
const results = data.list; //list为后端返回数组
//2.将取回的数据push到本实例数组内
state.list.push(...results);
//3.数据加载完成的标记
state.loading = false;
//当全部数据加载完成后,将finished为true
if(results.length > 0) {
state.pageNumber = data.p_num;
} else {
state.finished = true;
}
} catch (err) {
state.error = true;
state.loading = false;
}
}
//...
spl_autoload_register()
函数可以指定一个函数来替代 __autoload()
函数的功能。语法格式如下:spl_autoload_register([$autoload_function [, $throw = true [, $prepend = false ]]])
参数说明如下:
$autoload_function:
要替代 __autoload()
函数的函数名称,也可以是一个匿名函数。如果没有提供任何参数,则自动注册 autoload
的默认实现函数 spl_autoload()
;$throw:
用来设置 $autoload_function
无法成功注册时,spl_autoload_register()
函数是否抛出异常;$prepend:
如果是 true
,则 spl_autoload_register()
函数会添加 $autoload_function
函数到队列之首,否则添加到队列尾部。注意:与 __autoload() 函数不同,spl_autoload_register() 可以多次定义。
<?php
spl_autoload_register('loadClass');
function loadClass($class){
$file = './'.$class.'.php';
include_once($file);
}
$obj = new Demo();
?>
运行上面的代码同样需要上面示例中用到的 Demo.php 文件。
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,是一种动态获取的信息以及动态调用对象的方法的功能。
理解go
语言的接口。很多跟我一样的初学者被go
语言接口搞得云里雾里,也会定义,也使用了,就是不能完全理解接口有什么用,有什么意义。
刚看到一句话,我觉得非常好:“接口的意义就是描述数据类型的行为,以及数据类型的共性特征。”我们拿到一个数据,知道它实现了哪个接口,就知道用什么方法操作它了。
也就是通过数据所实现的接口,我们就知道了数据得类型,进而就知道如果去操作了。我们不能对石头执行吃的操作,但是可以对米饭执行吃的方法。
INT
等整型不要采用无符号的,计算增加会减少时候如果是负数会报错。BIG INT
,而不要用四个字节INT
,自增在MySQL 8.0
前都会有回溯问题。UTF8MB4
字符编码。DATETIME
,精确到毫秒用DATETIME(6)
,不建议使用INT
或TIMESTAMP
。JSON
存储非频繁更新的结构化数据,比如用户标签等。id
或有序UUID
)作为主键。AES256
等)+多轮加密。Mysql
中通过KV
方式访问表中数据,若只是简单的SET
和GET
,可以转成Memcached
的KV
方式,减少开销,提升50%左右性module.exports = {
// 基本路径 baseURL已经过时
publicPath: './',
// 输出文件目录
outputDir: 'dist',
// eslint-loader 是否在保存的时候检查
lintOnSave: true,
// use the full build with in-browser compiler?
// https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
// compiler: false,
// webpack配置
// see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
chainWebpack: () => {},
configureWebpack: () => {},
// vue-loader 配置项
// https://vue-loader.vuejs.org/en/options.html
// vueLoader: {},
// 生产环境是否生成 sourceMap 文件
productionSourceMap: true,
// css相关配置
css: {
// 是否使用css分离插件 ExtractTextPlugin
extract: true,
// 开启 CSS source maps?
sourceMap: false,
// css预设器配置项
loaderOptions: {},
// 启用 CSS modules for all css / pre-processor files.
modules: false
},
// use thread-loader for babel & TS in production build
// enabled by default if the machine has more than 1 cores
parallel: require('os').cpus().length > 1,
// 是否启用dll
// See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode
// dll: false,
// PWA 插件相关配置
// see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
pwa: {},
// webpack-dev-server 相关配置
devServer: {
open: process.platform === 'darwin',
disableHostCheck: true,
host: 'xfcms-search.local',//如果是真机测试,就使用这个IP
port: 80,
https: false,
hotOnly: false,
before: app => {}
},
// 第三方插件配置
pluginOptions: {
// ...
}
}