上2篇笔记讲述了TCP服务器端和TCP客户端,既然他们之间要互相通讯,必须要制定一套通讯协议。
swoole目前支持2种通讯协议:EOF结束符协议和固定包头+包体协议
一、EOF结束符协议
EOF协议处理的原理是每个数据包结尾加一串特殊字符表示包已结束。如memcache、ftp、stmp都使用\r\n作为结束符。发送数据时只需要在包末尾增加\r\n即可。使用EOF协议处理,一定要确保数据包中间不会出现EOF,否则会造成分包错误。
回顾我们上2篇笔记的例子,修改一下代码:
服务器端示例代码:
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set([
'open_eof_split' => true,
'package_eof' => "\r\n",
]);
//监听连接进入事件
$serv->on('connect', function ($serv, $fd) {
echo "Client: Connect.\n";
});
//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, "Server: