Всем привет!
Я использую swoole для WebSockets.
Я создаю клиентскую часть:
<script>
var ws = new WebSocket('ws://site.ll:9502/?user=tester01');
ws.onmessage = function(evt) { console.log(evt.data); };
ws.onopen = function (event) {
ws.send('test');
}
</script>
Создать часть WebServer:
$server = new swoole_websocket_server("127.0.0.1", 9502);
$server->on("start", function ($server) {
echo "Swoole http server is started at http://127.0.0.1:9502\n";
});
$server->on('open', function($server, $req) {
echo "connection open: {$req->fd}\n";
});
$server->on('message', function($server, $frame) {
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", "world"]));
});
$server->on('close', function($server, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();
Создать отправку с серверной части:
$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9502, -1)) {
exit("connect failed. Error: {$client->errCode}\n");
}
$client->send("hello world\n");
echo $client->recv();
$client->close();
Я пытаюсь создать TCP-сервер внутри сервера WebSocket, просто добавив следующую часть внутри обратного вызова «при запуске»:
$server2 = new swoole_server("127.0.0.1", 9503);
$server2->on('connect', function ($server2, $fd){
echo "connection open: {$fd}\n";
});
$server2->on('receive', function ($server2, $fd, $from_id, $data) {
$server2->send($fd, "Swoole: {$data}");
$server2->close($fd);
});
$server2->on('close', function ($server2, $fd) {
echo "connection close: {$fd}\n";
});
$server2->start();
Но просто получаю ошибку:
Swoole \ Server :: __ construct (): eventLoop уже создан. невозможно создать swoole_server.
Мне нужно отправить данные с сервера на клиент. Как я могу это сделать?
В рабочей библиотеке я занимаюсь следующим:
https://github.com/Shkarbatov/WebSocketPHPWorkerman/blob/master/worker.php
Загрузить рабочий результат на github: https://github.com/Shkarbatov/WebSocketPHPSwoole
Вы должны использовать addListener
функция вместо new swoole_server
,
Документ здесь:
https://www.swoole.co.uk/docs/modules/swoole-server-methods#swoole_server-addlistener