swoole做PHP服务器,如何使用swoole来创建服务器(上)

这篇文章主要介绍了关于swoole创建服务器之一,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

1.创建tcp服务器

先照着文档创建一个tcp服务器<?php

//创建服务器 参数分别是

//监听的地址 127.0.0.1 表示监听本机,0.0.0.0表示监听所有地址

//9501 端口号 这个你随便定都行只要没被占用过(netstat -an | grep 查看端口使用情况) 如果被占用就使用 命令 kill杀死进程

//SWOOLE_PROCESS 为多进程模式,一般这里不传值,默认为多进程 SWOOLE_BASE为基本模式

//SWOOLE_SOCK_TCP 也就是说创建tcp服务器

$serv=new swoole_server('127.0.0.1','9501',SWOOLE_PROCESS,SWOOLE_SOCK_TCP);

//服务器设置参数

$serv->set([

'worker_num'=>4, //worker进程数 一般为cpu数的 1-4倍

'max_request'=>10000, //worker进程在处理完n次请求后结束运行重建一个

]);

//这里

//当然还有很多设置的参数 文档传送门:https://wiki.swoole.com/wiki/page/13.html

//监听连接进入事件(这里是一个闭包写法)连接后调用的函数

//$fd客户端连接的唯一标示

//$reactor_id 线程id 是一个自增数字,范围是1 ~ 1600万,fd超过1600万后会自动从1开始进行复用

$serv->on('connect', function ($serv, $fd, $reactor_id) {

echo "Client: {$reactor_id} - {$fd}-Connect.\n";

});

//监听数据接收事件

//$data就是接收的数据

$serv->on('receive', function ($serv, $fd, $reactor_id, $data)) {

$serv->send($fd, "Server: ".$data);

echo '收到了数据'.$data;

});

//监听连接关闭事件

$serv->on('close', function ($serv, $fd) {

echo "Client: Close".$fd."\n";

});

//启动服务器

$serv->start();

ok我们测试一下 php tcp.php 打开tcp服务器(如果端口被占用,则杀死占用端口的进程,关掉使用ctrl+c,挂起使用ctrl+z)

70e9b51f13978487c77ea075aff325bf.png

再打开telnet(我们要再打开一个终端)测试一下是不是成功了,随便输入eqqeq

450b0e73e5fbd9a450e421a0ec19f842.png

再看看tcp服务器

0516320d471784765b7336a359c5a7cd.png

看到这里我们整理一下思路:

创建了tcp服务器->telnet连接服务器->tcp执行connect->telnent发送信息->tcp监听到receive事件->telnent断开->tcp 监听到close事件

疑问

1.server与telnet的关系

服务器与客服端的关系,一个server对应多个telnet

2.$serv->send($fd, "Server: ".$data); 和 直接输出 echo 有什么区别呀?

send是发送数据 给 对方(连接我服务器的) ,比如你用微信和你的朋友聊天,你发了一个server: ".$data,那么就相当于你把消息发给了你朋友, 而echo的话是输出内容,只给自己。

3.线程与进程是什么鬼?

相当于一个工厂(CPU)里的多个车间(进程)

一个车间(进程)有很多个工人(线程)

车间里面有厕所(共享内存),工人都可以共用,但是你得等工人用完才可以进去

我们平时使用php是单进程,那么大的工厂就用了一个车间效率当然慢,

所以我们要多个车间(多进程),多个员工(线程),来提高效率

注意:

每次修改服务器脚本文件后都要

关闭进程再重新打开才会生效

2.创建udp服务器

1.TCP核ucp都是传输层协议,但是UDP服务器与TCP服务器不同,UDP没有连接的概念,udp消耗资源比较小,但是速度快。启动Server后,客户端无需Connect,直接可以向Server监听的9502端口发送数据包。

2.udp的创建方式跟tcp很像//就是把最后一个参数改为 SWOOLE_SOCK_UDP

$serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);

3.UDP服务器可以使用不用telnet而是用 netcat -u 来连接测试

nc安装:

yum -y install yum -y install nc.x86_64 使用就是直接 nc -u 127.0.0.1 9502

4.完整的实现//创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP

$serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);

//udp没有 $serv->on connect的概念

//监听数据接收事件

$serv->on('Packet', function ($serv, $data, $clientInfo) {

$serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);

var_dump($clientInfo);

});

//启动服务器

$serv->start();

5.测试,同样我们也打开2个终端

udp服务器 这里我们打印了$clientInfo

d099c746fd18b1477149e57e81eee700.png

nc测试服务器

80166c363928fe31cdcfcaf94d0ef19f.png

ok测试没有问题^-^

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值