Lin Blog

林柏格


  • 首页

  • 关于

  • 标签

  • 分类

  • 搜索

源码编译Portable Pyton

发表于 2019-09-28 | 更新于 2019-09-30 | 分类于 实践

Portable的意思是可拔插的,便携式的。Portable 程序在一台计算机上编译好后,移植到其他计算机上就可以直接运行。一般程序运行时都会依赖一些第三方库,只要把对这些库的依赖方式由静态依赖改成动态依赖,再把这些库和主体程序放到一起打包,就成为一个Portable 程序。
当然Portable 也是有限度的,不能跨操作系统移植,毕竟程序对操作系统的依赖关联太多,除非把整个系统也移植了😂。

以Python-3.6.5 为例,讲述一下源码编译一个Portable Pyton 的主要流程。

阅读全文 »

开发一个React + Electron应用

发表于 2019-02-16 | 更新于 2019-09-30 | 分类于 实践

最近用React + Electron开发了一个RSS阅读器,开源在:https://github.com/breeze2/breader,这里记录一下大致的开发过程。

Breader

阅读全文 »

PHP代码静态分析工具PHPStan

发表于 2018-08-08 | 更新于 2019-09-30 | 分类于 实践

最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下。可能是自己粗心大意,或者说php -l检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PHP是动态语言),那么有没有办法,在代码代码正式运行之前,把语法错误全找出来呢?

这里介绍一款PHP代码静态分析工具:PHPStan,不需要运行代码,也可以对代码进行严格的语法检测,尽量将代码运行错误率降到最低。

PHPStan

安装

目前,PHPStanV0.10.2要求系统环境的PHP版本不低于7.1。用Composer全局安装:

1
$ composer global require phpstan/phpstan
阅读全文 »

用Swoole实现一个简单的MySQL连接池

发表于 2018-07-20 | 更新于 2019-09-30 | 分类于 实践

最近Swoole发布了4.0.2版本,内置协程更加完善,利用Swoole\Coroutine\Channel和Swoole\Coroutine\MySQL可以轻松实现一个MySQL连接池。

阅读全文 »

在JPEG图片中嵌入HTML

发表于 2018-06-12 | 更新于 2019-09-30 | 分类于 实践

最近看到一个有趣的网页:http://lcamtuf.coredump.cx/squirrel/,或者说一张有趣的图片——因为用网络浏览器打开它看到的是一个网页,用图片浏览器打开它看到的又是一张图片。

松鼠迷

阅读全文 »

在Ubuntu上运行多实例MySQL

发表于 2018-03-18 | 更新于 2019-09-30 | 分类于 躬行

一般情况下,都是一台服务器主机运行一个MySQL实例;不过在单机配置非常高的情况下,也可以考虑运行多个MySQL实例。毕竟MySQL是单进程(多线程)的运行模式,单实例MySQL用不上太多资源。

当然,高配置的单机应该考虑使用Docker实现多MySQL服务,只是这里介绍一下如何运行多实例MySQL。本以为在Ubuntu上实现很容易,原来也并不简单。

运行环境

  • Ubuntu 16.04
  • MySQL 5.17
阅读全文 »

一些有趣的MySQL查询问题

发表于 2018-03-02 | 更新于 2019-09-30 | 分类于 笔记

在LeetCode上有一些有趣的MySQL查询问题,这里记录下来,方便以后查阅。

阅读全文 »

Swoole+Lumen:同步编程风格调用MySQL异步查询

发表于 2018-03-02 | 更新于 2019-09-30 | 分类于 求索

网络编程一直是PHP的短板,尽管Swoole扩展弥补了这个缺陷,但是其编程风格偏向了NodeJS或GoLang,与原本的同步编程风格迥然相异。目前PHP的大部分主流应用框架依然是同步编程风格,所以一直在探索Swoole与同步编程结合的途径。
lumen-swoole-http正是连接同步编程Lumen和异步编程Swoole的一座桥梁,有兴趣可以关注一下。

LNMP的不足

LNMP是经典的Web应用架构组合,虽然(Linux、NginX、MySQL和PHP-FPM)四者各种是优秀的系统或软件,但是组合到一起的总体性能并不尽人意,明显的不是1+1+1+1>4,而是4+3+2+1<1。Linux系统无可厚非,主要问题出现在:

从NginX到PHP-FPM

NginX利用IO多路复用机制epoll,极大地减少了IO阻塞等待,可以轻松应对C10K。可是每次NginX将用户请求传递给PHP-FPM时,PHP-FPM总是需要从新加载PHP项目代码:创建执行环境,读取PHP文件和代码解析、编译等操作一次又一次的重复执行,造成不小的消耗。

从PHP-FPM到MySQL

由于PHP代码本身是同步执行,PHP-FPM连接MySQL查询数据时,只能空闲等待MySQL返回查询结果。一个查询语句执行时间可能会需要几秒钟,期间PHP-FPM若是能暂时放下当前用户慢查询请求,而去处理其他用户请求,效率必然有所提高。

阅读全文 »

在Lumen项目中自定义后置异步协程

发表于 2018-03-01 | 更新于 2019-09-30 | 分类于 求索

上一篇文章介绍了利用yield特性实现后置的MySQL异步查询协程,按照这种“后置执行”的思路,其实还可以实现更多其他的后置异步协程。这里介绍如何自定义一个后置异步协程,将最大开发自由度交由Lumen框架使用者。

CustomAsyncProcess

lumen-swoole-http中已经定义了抽象类CustomAsyncProcess,在处理用户请求时,若是捕获到CustomAsyncProcess类的对象,程序便会按照CustomAsyncProcess对象的指定方法执行。部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
...
$current_value = $last_generator->current();
if ($current_value instanceof CustomAsyncProcess) {
if ($worker->canDoCoroutine()) {
$worker->upCoroutineNum();
return $current_value->runAsyncTask($request, $response, $worker, $this->scheduler, $last_generator);
} else {
return $current_value->runNormalTask($request, $response, $worker, $this->scheduler, $last_generator);
}
}
...
阅读全文 »

在Lumen项目中使用Swoole异步MySQL客户端的实现方法

发表于 2018-03-01 | 更新于 2019-09-30 | 分类于 求索

上一篇文章介绍了用Swoole HTTP服务器替代NginX + PHP-FPM来运行Lumen项目的方法,提高运行效率。不过,在处理用户请求过程中还是会存在很多IO阻塞情况,比如MySQL数据查询。有没有可能在Lumen中使用异步MySQL客户端,以此避免IO阻塞呢?

异步MySQL客户端

Swoole1.8.6增加了内置异步MySQL客户端的支持,无需依赖其他第三方库,使用方法也非常简单,(具体参考Swoole官方文档异步MySQL客户端):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$db = new \swoole_mysql;
$mysql_config = array(
'host' => '192.168.56.102',
'port' => 3306,
'user' => 'test',
'password' => 'test',
'database' => 'test',
'charset' => 'utf8', //指定字符集
'timeout' => 2,
);

$db->connect($mysql_config, function ($db, $r) {
if ($r) {
$sql = 'show tables';
$db->query($sql, function($db, $r) {
if ($r) {
var_dump($r);
}
$db->close();
});
}
});
阅读全文 »
12…5
林毅锋

林毅锋

阿牛不说话
45 日志
8 分类
36 标签
RSS
GitHub E-Mail
友情链接
  • 赖同学
© 2015 – 2019 林毅锋
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Muse v7.1.2