当前位置:  首页>> 技术小册>> PHP高性能框架-Swoole

编写TCP服务启动文件
在服务器中建立一个项目目录,如swoole,建立tcpServer.php
文件:swoole\tcpServer.php

  1. <?php
  2. //创建Server对象,监听 127.0.0.1:8081 端口。
  3. $server = new Swoole\Server('127.0.0.1', 8081);
  4. //监听连接进入事件。
  5. $server->on('Connect', function ($server, $fd) {
  6. echo "Client: Connect.\n";
  7. });
  8. //监听数据接收事件。
  9. $server->on('Receive', function ($server, $fd, $reactor_id, $data) {
  10. $server->send($fd, "Server: {$data}");
  11. });
  12. //监听连接关闭事件。
  13. $server->on('Close', function ($server, $fd) {
  14. echo "Client: Close.\n";
  15. });
  16. //启动服务器
  17. $server->start();

运行服务
执行命令:

  1. root@304ed074bf34:/var/www/html/swoole# ls
  2. tcpServer.php
  3. root@304ed074bf34:/var/www/html/swoole# php tcpServer.php

使用ps命令和netstat命令查看tcp服务进程:

  1. root@304ed074bf34:/var/www/html# ps -ef | grep tcp
  2. root 90 60 0 13:02 pts/3 00:00:00 php tcpServer.php
  3. root 91 90 0 13:02 pts/3 00:00:00 php tcpServer.php
  4. root 93 91 0 13:02 pts/3 00:00:00 php tcpServer.php
  5. root@304ed074bf34:/var/www/html# netstat -tlunp | grep 8081
  6. tcp 0 0 127.0.0.1:8081 0.0.0.0:* LISTEN 90/php

测试连接tcp服务器
使用telnet 127.0.0.1 8081命令连接到tcp服务器,并发送字符串hello,查看响应。

  1. root@304ed074bf34:/var/www/html# telnet 127.0.0.1 8081
  2. Trying 127.0.0.1...
  3. Connected to 127.0.0.1.
  4. Escape character is '^]'.
  5. hello
  6. Server: hello

这样就创建了一个 TCP 服务器,监听本机 8081 端口。它的逻辑很简单,当客户端 Socket 通过网络发送一个 hello 字符串时,服务器会回复一个 Server: hello 字符串。

小结:

Server 是异步服务器,所以是通过监听事件的方式来编写程序的。当对应的事件发生时底层会主动回调指定的函数。如当有新的 TCP 连接进入时会执行 onConnect 事件回调,当某个连接向服务器发送数据时会回调 onReceive 函数。

  • 服务器可以同时被成千上万个客户端连接,$fd 就是客户端连接的唯一标识符。
  • 调用 $server->send() 方法向客户端连接发送数据,参数就是 $fd 客户端标识符。
  • 调用 $server->close() 方法可以强制关闭某个客户端连接。
  • 客户端可能会主动断开连接,此时会触发 onClose 事件回调。

该分类下的相关小册推荐: