向客户端发送数据,函数原型:
bool swoole_server->send(int $fd, string $data, int $extraData = 0);
$data
,发送的数据,TCP协议最大不得超过2M
,可修改 buffer_output_size 改变允许发送的最大包长度65507
,UDP
包头占8
字节, IP
包头占20
字节,65535-28 = 65507
$fd
保存客户端IP,$extraData
保存server_fd
和port
true
false
,调用$server->getLastError()
方法可以得到失败的错误码send
操作具有原子性,多个进程同时调用send
向同一个TCP
连接发送数据,不会发生数据混杂2M
的数据,可以将数据写入临时文件,然后通过sendfile
接口进行发送8K
的数据时,底层会启用Worker
进程的共享内存,需要进行一次Mutex->lock
操作Worker
进程的管道缓存区已满时,发送8K
数据将启用临时文件存储Socket
内存缓存区塞满,底层会立即返回false
,应用程序可以调整socket_buffer_size
设置,或 将数据保存到磁盘,等待客户端收完已发送的数据后再进行发送
TCP
客户端发送数据,不需要$extraData
参数
send
操作会直接在Worker
进程内发送数据包,不会再经过主进程转发onReceive
后立即向客户端发送数据,可以不传$extraData
UDP
客户端发送数据,必须要传入$extraData
64K
的数据会分成多个传输单元进行发送,如果其中一个单元丢包,会导致整个包被丢弃。所以外网服务,建议发送1.5K
以下的数据包