代码改变世界

使用 Docker 构建和运行自己的镜像

2020-08-23 17:04 by 小伍2013, 361 阅读, 0 推荐, 收藏, 编辑
摘要:步骤 首先,从 GitHub 中克隆示例项目: git clone https://github.com/dockersamples/node-bulletin-board cd node-bulletin-board/bulletin-board-app node-bulletin-board 项 阅读全文

Docker 安装并运行 Redis

2020-08-20 14:12 by 小伍2013, 173 阅读, 0 推荐, 收藏, 编辑
摘要:说明 在Windows下运行Redis主要有以下几种方式: 使用微软官方构建的Windows版Redis,最新版本是3.0.504,发布于2016-07-01。https://github.com/microsoftarchive/redis 使用非微软官方构建的Windows版Redis,最新版本 阅读全文

Swoole 进程管理模块 Process 之单进程的使用

2020-07-22 16:21 by 小伍2013, 199 阅读, 0 推荐, 收藏, 编辑
摘要:PHP 自带的 pcntl,存在很多不足,如: 没有提供进程间通信的功能; 不支持重定向标准输入和输出; 只提供了 fork 这样原始的接口,容易使用错误; Swoole\Process 提供了如下特性: 可以方便的实现进程间通讯; 支持重定向标准输入和输出,在子进程内 echo 不会打印屏幕,而是 阅读全文

Swoole 中使用 Lock 实现进程间锁

2020-07-20 10:48 by 小伍2013, 323 阅读, 0 推荐, 收藏, 编辑
摘要:注意:不要在 lock 和 unlock 操作中间使用可能引起协程切换的 API。 $lock = new Swoole\Lock(SWOOLE_MUTEX); echo "[Master]create lock\n"; $lock->lock(); if (pcntl_fork() > 0) { 阅读全文

Swoole 中使用 Atomic 实现进程间无锁计数器

2020-07-19 21:45 by 小伍2013, 222 阅读, 0 推荐, 收藏, 编辑
摘要:使用示例: $atomic = new Swoole\Atomic(); $serv = new Swoole\Server('127.0.0.1', '9501'); $serv->set([ 'worker_num' => 1, 'log_file' => '/dev/null' ]); // 阅读全文

Swoole 中使用 Table 内存表实现进程间共享数据

2020-07-19 11:10 by 小伍2013, 325 阅读, 0 推荐, 收藏, 编辑
摘要:背景 在多进程模式下进程之间的内存是相互隔离的,在一个工作进程中的全局变量和超全局变量,在另一个工作进程中是无法读取和操作的。 如果只有一个工作进程,则不存在进程隔离问题,可以使用全局变量和超全局变量。 要实现进程间共享数据,我们可以使用第三方的 Redis 内存数据库或 Swoole 内置的 Ta 阅读全文

Swoole 中毫秒定时器(Timer)的使用

2020-07-18 19:31 by 小伍2013, 384 阅读, 0 推荐, 收藏, 编辑
摘要:间隔定时器, tick 定时器会持续触发,直到调用 clear() 清除为止。 $timer = Swoole\Timer::tick(3000, function (int $timer_id, $param1, $param2) { echo "timer_id #$timer_id, afte 阅读全文

Swoole 中使用 Context 类管理上下文,防止发生数据错乱

2020-07-18 14:34 by 小伍2013, 473 阅读, 0 推荐, 收藏, 编辑
摘要:前面的文章中,我们说过:不能使用类静态变量 Class::$array / 全局变量 global $_array / 全局对象属性 $object->array / 其他超全局变量 $GLOBALS 等保存协程上下文内容,以免发生数据错乱。 那是因为Swoole是常驻内存的,这些全局变量是共享的, 阅读全文

Swoole 中协程的使用注意事项及协程中的异常捕获

2020-07-17 16:26 by 小伍2013, 867 阅读, 0 推荐, 收藏, 编辑
摘要:协程使用注意事项 协程内部禁止使用全局变量,以免发生数据错乱; 协程使用 use 关键字引入外部变量到当前作用域禁止使用引用,以免发生数据错乱; 不能使用类静态变量 Class::$array / 全局变量 $_array / 全局对象属性 $object->array / 其他超全局变量 $GLO 阅读全文

Swoole 中使用 PDO 连接池、Redis 连接池、Mysqli 连接池

2020-07-17 16:25 by 小伍2013, 516 阅读, 0 推荐, 收藏, 编辑
摘要:连接池使用说明 所有连接池的实现均基于 ConnectionPool 原始连接池; 连接池的底层原理是基于 Channel 的自动调度; 开发者需要自己保证归还的连接是可重用的; 若连接不可重用,需要调用 $pool->put(null); 归还一个空连接; 归还空连接后,原始连接池会重新创建连接以 阅读全文