swoole
TCP 和 UDP 有以下区别:
-
TCP 面向连接(如打电话要先拨号建立连接)提供可靠的服务,UDP 是无连接的,即发送数据之前不需要建立连接,UDP 尽最大努力交付,即不保证可靠交付。
-
UDP 具有较好的实时性,工作效率比 TCP 高,适用于对高速传输和实时性有较高的通信或广播通信。
-
每一条 TCP 连接只能是一对一的,UDP 支持一对一,一对多,多对一和多对多的交互通信。
-
UDP 分组首部开销小,TCP 首部开销 20 字节,UDP 的首部开销小,只有 8 个字节。
-
TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流,UDP 是面向报文的一次交付一个完整的报文,报文不可分割,报文是 UDP 数据报处理的最小单位。
-
UDP 适合一次性传输较小数据的网络应用,如 DNS,SNMP 等
socket一般用于比较即时的通信和实时性较高的情况,比如推送,聊天,保持心跳长连接等;
socket不属于协议范畴,而是一个调用接口(API),是对TCP/IP协议的封装。实现服务器与客户端之间的物理连接,并进行数据传输。Socket处于网络协议的传输层,主要有TCP/UDP两个协议(当然也有TCP/IP协议族中其他的协议)。
socket连接是长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会使连接断开,比如:服务器端或客户端主机宕机了、网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息。
socket一旦连接上了,就一直保持连接,就会造成阻塞IO,与此相对的的,还有非阻塞IO。
socket传输的数据可自定义,为字节级,数据量小,可以加密,数据安全性高,适合Client/Server之间信息实时交互。
http一般用于实时性要求不那么高的情况,比如信息反馈,图片上传,获取新闻信息等。
http连接
:就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。
//创建服务器 tcp
$host = '0.0.0.0';//string 本地IP或监听对应外网IP
$port = 9501; //int 端口号
// $mode:SWOOLE PROCESS 多进程的方式
//$socke_type : SWOOLE_SOCK_TCP 与 SWOOLE_SOCK_UDP 模式
$serv = new swoole_server($host,$port,$mode,$sock_type); //$mode,$sock_type 可不设置
//使用
//bool $swoole_server->on(string $event, mixed $callback);
//connect 当建立连接的时候 $serv:服务器信息, $fd:客户端信息
//receive 当接收到数据 $serv:服务器信息, $fd:客户端,$from_id: ID, $data数据
//close:关闭连接
$serv->on('connect',fnuction($serv,$fd){
echo "建立连接";
});
$serv->on('receive ',fnuction($serv,$fd,$from,$data){
echo "接收到数据\n";
});
$serv->on('close ',fnuction($serv,$fd){
echo "接收到数据\n";
});
$serv->start();//启动服务器
//创建服务器 UDP
$serv = new swoole_server($"0.0.0.0",9502,SWOOLE_PROCESS,SWOOLE_SOCK_UDP );
//监听数据接收的事件
$serv服务器信息 $data数据,接收到的数据 $fd客户端信息
$serv->on('packet',fnuction($serv,$data,$fd){
//发送数据到相应客户端,反馈信息
$serv->sendto($fd['address'],$fd['port'],"Server: $data");
var_dump($fd);
});
$serv->start();//启动服务器
//创建服务器 web
//$request 请求信息get post
//$response 返回信息
$serv = new swoole_server($"0.0.0.0",9501);
$serv->on('request',fnuction($request,$response){
var_dump($request);
$response->header("Content-Type","text/html; charset=utf-8");//设置反回头信息
$response->end(“hello world”.rand(100,999));
});
$serv->start();//启动服务器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」