Mik*_*ike 8 php sockets asyncsocket php-5.3
但是如果脚本使用相同的非阻塞套接字发送几条长消息,会发生什么?
socket_write($socket, $string1, $length);
socket_write($socket, $string2, $length);
socket_write($socket, $string3, $length);
socket_write($socket, $string4, $length);
Run Code Online (Sandbox Code Playgroud)
这些消息是否排队(在发送方/接收方?)或接收方是否可能因为发送"并行"而获取不同消息的一部分?
例如:接收器是否有可能获得10个字节的$ string1,然后30个字节的$ string2,然后是另外25个字节的$ string1 ......依此类推......
这取决于套接字正在使用的协议.有关可能的套接字类型,请参阅socket_create.主要类型是UDP和TCP:
udp 用户数据报协议是一种无连接,不可靠的协议,具有固定的记录长度.由于这些方面,UDP需要最少量的协议开销.
tcp 传输控制协议是一种可靠的,基于连接的,面向流的全双工协议.TCP保证将按发送顺序接收所有数据包.如果任何数据包在通信过程中以某种方式丢失,TCP将自动重新传输数据包,直到目标主机确认该数据包.出于可靠性和性能原因,TCP实现本身决定了底层数据报通信层的适当八位字节边界.因此,TCP应用程序必须允许部分记录传输的可能性.
要直接回答您的问题,TCP套接字将保证按顺序传递,而UDP套接字则不会.