Mastering Swoole PHP: Build High Performance Concurrent System with Async and Coroutines / Осваиваем Swoole PHP: построение высокопроизводительной конкурентной системы с асинхронностью и корутинами: Разработка собственных протоколов TCP

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Разработка собственных протоколов TCP
Мы можем разработать собственный протокол TCP с помощью удобного API, предоставляемого Swoole.

bubenok 18.02.21 в 03:45

0

Представьте, что мы хотим транслировать данные в реальном времени с TCP-сервера всем подключенным к нему клиентам. Мы можем сериализовать данные в виде JSON, а затем добавим строку, содержащую длину пакета N с помощью функции PHP pack('N', $length).

bubenok 18.02.21 в 03:48

0

<?php
$data=json_encode(array('key'=>'val'));
$packet=pack('N',strlen($data)).$data;

bubenok 18.02.21 в 03:48

0

<?php
$server=newSwoole\Server("127.0.0.1",9503);
$server->on('connect',function($server,$fd){
echo"connection open:{$fd}\n";
go(function() {
while(1) {
if(!$server->exist($fd)) {
break;
}
$data=json_encode(array('time'=>time()));
$packet=pack('N',strlen($data)).$data;
​ $server->send($fd,$packet);
​ co::sleep(1);
}
});
});
$server->on('receive',function($server,$fd,$from_id,$data) {
});
$server->on('close',function($server,$fd) {
echo"connection close:{$fd}\n";
});
$server->start();

bubenok 18.02.21 в 03:48

0

<?php
Co\run(function() {
go(function() {
$tcpclient=newSwoole\Coroutine\Client(SWOOLE_SOCK_TCP);
$tcpclient->set([
'open_length_check'=>1,
'package_length_type'=>'N',
'package_length_offset'=>0,
'package_body_offset'=>4,
]);
while(true) {
if(!$tcpclient->isConnected()) {
$tcpclient->connect('127.0.0.1',9090,0.5);
}
$packet=$tcpclient->recv() ;
if($packet) {
​​ $json=substr($packet,4);
​​ $data=json_decode($json);
var_dump($data);
}
}
});
});

bubenok 18.02.21 в 03:48

0
Минутку...