Skip to content

Commit 541428b

Browse files
committed
update docs
1 parent a92c32e commit 541428b

File tree

4 files changed

+150
-1
lines changed

4 files changed

+150
-1
lines changed

docs/zh_CN/2-1-server.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44

55
参数解析:
66

7+
```php
78
Server::createServer($name, $address, array $config = [])
89

910
$name 为服务器启动的进程名字
1011
$address 为服务器监听的地址,如: tcp://127.0.0.1:9527, udp://127.0.0.1:9527, ws://127.0.0.1:9527, http://127.0.0.1:9527
1112
$config 服务器配置,保持和 [官网](http://wiki.swoole.com/wiki/page/274.html) 一致,新增 pid_file 选项, 当 pid_file 不存在的时候,默认会存放在当前执行命令的目录下。
13+
```
1214

1315
### TCP Server
1416

@@ -98,4 +100,4 @@ class WebSocket extends WebSocket
98100
WebSocket::createServer('ws', 'ws://0.0.0.0:9527')->start();
99101
```
100102

101-
下一节: [服务器](2-2-client.md)
103+
下一节: [客户端](2-2-client.md)

docs/zh_CN/2-2-client.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# 客户端
2+
3+
首先得必须说明一下什么是客户端,所谓客户端,就是咱们所指的 "消费者",服务器,也有可能是客户端。可以这么理解,只要是发起请求到另外一段获取获取的,即可视为客户端。因此有时候咱们的服务器,也是其中一个客户端。
4+
5+
客户端最后通过 `resolve` 进行调用。
6+
7+
### 同步客户端
8+
9+
同步客户端是最传统的一种方式,也是最容易上手的,整个过程都是阻塞的。
10+
11+
```php
12+
use FastD\Swoole\Client\Sync\SyncClient;
13+
14+
15+
$client = new SyncClient('tcp://127.0.0.1:9527');
16+
17+
$client
18+
->connect(function ($client) {
19+
$client->send('hello world');
20+
})
21+
->receive(function ($client, $data) {
22+
echo $data . PHP_EOL;
23+
$client->close();
24+
})
25+
->resolve()
26+
;
27+
```
28+
29+
### 异步客户端
30+
31+
不管是同步还是异步客户端,每个方法都是一个回调,统一客户端的写法,避免造成多种操作方式的,造成混淆。
32+
33+
值得注意的是,异步客户端需要对每个操作进行回调处理。
34+
35+
```php
36+
use FastD\Swoole\Client\Async\AsyncClient;
37+
38+
39+
$client = new AsyncClient('tcp://127.0.0.1:9527');
40+
41+
$client
42+
->connect(function ($client) {
43+
$client->send('hello world');
44+
})
45+
->receive(function ($client, $data) {
46+
echo $data . PHP_EOL;
47+
})
48+
->error(function ($client) {
49+
print_r($client);
50+
})
51+
->close(function ($client) {})
52+
->resolve()
53+
;
54+
```
55+
56+
### Socket 客户端
57+
58+
Socket 客户端是基于 PHP 内部的 sockets 扩展实现,因此使用该客户端前先要确保 sockets 扩展已经正常安装。
59+
60+
```php
61+
use FastD\Swoole\Client\Socket;
62+
63+
64+
$socket = new Socket('tcp://127.0.0.1:9527');
65+
66+
$socket->connect(function (Socket $socket) {
67+
$socket->send('hello world');
68+
})->receive(function ($data) {
69+
echo ($data) . PHP_EOL;
70+
})->resolve();
71+
```
72+
73+
下一节: [进程](2-3-process.md)

docs/zh_CN/2-3-process.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# 进程
2+
3+
什么是进程,那什么是线程,而协程又是什么?
4+
5+
* 进程是资源分配的最小单位,线程是程序执行的最小单位。
6+
* 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
7+
* 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
8+
* 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
9+
10+
简单理解吧,进程是独立的,而线程则是基于进程上再分配出来的,因此线程会直接影响到进程,而进程之间则不会有太多的依赖和影响。
11+
12+
而协程,小弟正在研究当中...
13+
14+
### 单进程
15+
16+
进程会在执行完回调之后,退出自己的执行逻辑。而咱们平时日常开发当中的常驻内存的进程,正是因为内部是一个无限循环的监听、和逻辑处理,才正是他们需要常驻的原因之一。
17+
18+
如简单的:
19+
20+
```php
21+
while(true) {
22+
// logic to do
23+
}
24+
```
25+
26+
以上的代码执行后,如果不通过手动的关闭,是不会退出进程。咱么是需要在内部做好管理操作,对进程进行一定的控制,这就是咱们下节讲到的: [信号量](3-1-signo.md)
27+
28+
```php
29+
use FastD\Swoole\Process;
30+
31+
$process = new Process('single', function () {
32+
timer_tick(1000, function ($id) {
33+
static $index = 0;
34+
$index++;
35+
echo $index . PHP_EOL;
36+
if ($index === 10) {
37+
timer_clear($id);
38+
}
39+
});
40+
});
41+
42+
$process->start();
43+
```
44+
45+
### 多进程
46+
47+
多进程与单进程的区别就是由 `start` 方法改变成 `fork` 方法即可,而多进程就会衍生出一个进程间通信的问题,进程间是否需要通信,交互,如何通信,都是咱们需要去考虑的,后面小弟研究透彻再与大家分享。
48+
49+
```php
50+
use FastD\Swoole\Process;
51+
52+
53+
$process = new Process('multi', function () {
54+
timer_tick(1000, function ($id) {
55+
static $index = 0;
56+
$index++;
57+
echo $index . PHP_EOL;
58+
if ($index === 10) {
59+
timer_clear($id);
60+
}
61+
});
62+
});
63+
64+
$process->fork(5);
65+
66+
$process->wait(function ($ret) {
67+
echo 'PID: ' . $ret['pid'] . PHP_EOL;
68+
});
69+
```
70+
71+
下一节: [信号量](3-1-signo.md)

docs/zh_CN/3-1-signo.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# 信号量
2+
3+
文档编写中...

0 commit comments

Comments
 (0)