使用composer方式安装:
composer create-project xielei/project
下载代码安装:
代码库地址:https://github.com/xielei/project
目录结构:
project
|-- LICENSE
|-- README.md
|-- app
| |-- gateway
| |-- register
| `-- worker
|-- composer.json
|-- composer.lock
`-- vendor
|-- autoload.php
|-- composer
`-- xielei
根据自己的开发环境分别修改app目录下的gateway/register/worker各个目录下的start.php文件中的端口。
根据上面的架构图,Gateway的进程监听的端口为对外端口,register注册中心使用的是内部端口
所以我们只需要更改Gateway的端口即可。
因为我的docker环境开放的端口为9090-9095:
u2@u2:~/swoole/4.8/www/project/app$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
d57ffcb0bbc2 phpswoole/swoole:4.8-php7.3 "/entrypoint.sh" 3 hours ago Up 2 hours 0.0.0.0:9090-9095->9090-9095/tcp, :::9090-9095->9090-9095/tcp swoole48
因此,tcp端口我这里改为9090:
project\app\gateway\start.php:
// 监听一个裸TCP端口
$gateway->listen('0.0.0.0', 9090);
$gateway->listen('0.0.0.0', 9090);
解释:
如果是在docker环境下,相当于server单独运行在一台服务器,需要从宿主机访问,因此,这里的ip由127.0.0.1改为0.0.0.0
如果非docker环境,原理相同,需要确认你是从哪里访问(127.0.0.1或所有ip都可以访问0.0.0.0),确认端口是否可访问,如果不能访问,需要确认是否防火墙未打开指定端口
启动服务器:
为了方便服务器的启动停止 ,编写一个简单的shell脚本来管理:
project\app\server.sh
#!/bin/bash
if [ "$1" != 'start' ] && [ "$1" != 'stop' ];
then
echo "Please use start/stop param"
exit 1
fi
if [ "$1" = 'start' ];
then
php register/start.php start -d
php worker/start.php start -d
php gateway/start.php start -d
elif [ "$1" = 'stop' ];
then
php register/start.php stop
php worker/start.php stop
php gateway/start.php stop
fi
启动:
root@d57ffcb0bbc2:/var/www/project/app# ./server.sh start
the service is running with daemonize
the service is running with daemonize
the service is running with daemonize
如果启动服务器后,看到the service is running with daemonize
提示,代表启动成功。
上面三条输出分别代表的是Gateway、Worker、Register三个服务进程。
通过ps命令查看启动的服务进程:
测试:
u2@u2:~/swoole/4.8/www/project/app$ telnet 127.0.0.1 9090
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
7f000001239400000002 connect~
hello
7f000001239400000002 say hello
你好
7f000001239400000002 say 你好
发送hello,你好两条消息,收到服务器响应。