这篇文章主要介绍了关于swoole创建服务器之一,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
1.创建tcp服务器
先照着文档创建一个tcp服务器
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)![1531280286970567.png 3526353065-5ad9a0da929cc_articlex[1].png](https://img.php.cn//upload/image/153/560/544/1531280286970567.png)
再打开telnet(我们要再打开一个终端)测试一下是不是成功了,随便输入eqqeq
![1531280291676985.png 342839588-5ad9a1fc9a7d6_articlex[1].png](https://img.php.cn//upload/image/999/423/578/1531280291676985.png)
再看看tcp服务器
![1531280296898119.png 113563854-5ad9a22c7be0d_articlex[1].png](https://img.php.cn//upload/image/570/374/716/1531280296898119.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是单进程,那么大的工厂就用了一个车间效率当然慢,
所以我们要多个车间(多进程),多个员工(线程),来提高效率
注意:
每次修改服务器脚本文件后都要
关闭进程再重新打开才会生效
千博购物系统.Net能够适合不同类型商品,为您提供了一个完整的在线开店解决方案。千博购物系统.Net除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。千博购物系统.Net适合中小企业和个人快速构建个性化的网上商店。强劲、安全、稳定、易用、免费是它的主要特性。系统由C#及Access/MS SQL开发,是B/S(浏览器/服务器)结构Asp.Net程序。多种独创的技术使
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
![1531280319571492.png 322001879-5ad9ad01a5654_articlex[1].png](https://img.php.cn//upload/image/281/694/749/1531280319571492.png)
nc测试服务器
![1531280324607555.png 1088919216-5ad9ad2809886_articlex[1].png](https://img.php.cn//upload/image/372/177/371/1531280324607555.png)
ok测试没有问题^-^
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:









