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();//启动服务器

posted @   minch  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示