编写TCP服务启动文件
在服务器中建立一个项目目录,如swoole,建立tcpServer.php
文件:swoole\tcpServer.php
<?php
//创建Server对象,监听 127.0.0.1:8081 端口。
$server = new Swoole\Server('127.0.0.1', 8081);
//监听连接进入事件。
$server->on('Connect', function ($server, $fd) {
echo "Client: Connect.\n";
});
//监听数据接收事件。
$server->on('Receive', function ($server, $fd, $reactor_id, $data) {
$server->send($fd, "Server: {$data}");
});
//监听连接关闭事件。
$server->on('Close', function ($server, $fd) {
echo "Client: Close.\n";
});
//启动服务器
$server->start();
运行服务
执行命令:
root@304ed074bf34:/var/www/html/swoole# ls
tcpServer.php
root@304ed074bf34:/var/www/html/swoole# php tcpServer.php
使用ps命令和netstat命令查看tcp服务进程:
root@304ed074bf34:/var/www/html# ps -ef | grep tcp
root 90 60 0 13:02 pts/3 00:00:00 php tcpServer.php
root 91 90 0 13:02 pts/3 00:00:00 php tcpServer.php
root 93 91 0 13:02 pts/3 00:00:00 php tcpServer.php
root@304ed074bf34:/var/www/html# netstat -tlunp | grep 8081
tcp 0 0 127.0.0.1:8081 0.0.0.0:* LISTEN 90/php
测试连接tcp服务器
使用telnet 127.0.0.1 8081命令连接到tcp服务器,并发送字符串hello,查看响应。
root@304ed074bf34:/var/www/html# telnet 127.0.0.1 8081
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello
Server: hello
这样就创建了一个 TCP 服务器,监听本机 8081 端口。它的逻辑很简单,当客户端 Socket 通过网络发送一个 hello 字符串时,服务器会回复一个 Server: hello 字符串。
小结:
Server 是异步服务器,所以是通过监听事件的方式来编写程序的。当对应的事件发生时底层会主动回调指定的函数。如当有新的 TCP 连接进入时会执行 onConnect 事件回调,当某个连接向服务器发送数据时会回调 onReceive 函数。