Есть простой пример сокета JS:
let socket = new WebSocket("ws://mvs.com/feed/socket")
socket.onopen = () => {
console.log('Connected')
}
socket.onerror = (error) => {
console.log(error.message)
}
socket.onclose = () => {
console.log('Connected closed')
}
socket.onmessage = (event) => {
var data = JSON.parse(event.data)
console.log("Type: " + data.type)
console.log("Type: " + data.message)
}
Есть контроллер FeedController.php в нём я создал actionSocket(Так же есть сам роут в файле route.php):
public function actionSocket() {
$feedData = new FeedData();
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, 0, PORT);
socket_listen($socket);
while (true) {
$newSocket = socket_accept($socket);
$header = socket_read($newSocket, 1024);
$feedData->sendHeaders($header, $newSocket, 'mvs.com/feed', PORT);
}
socket_close($socket);
}
И есть компонент FeedData.php:
class FeedData
{
public function sendHeaders($headersText, $newSocket, $host, $port) {
$headers = array();
$tmpLine = preg_split("/\r\n/", $headersText);
foreach ($tmpLine as $line) {
$line = rtrim($line);
if (preg_match('/\A(\S+): (.*)\z/', $line, $matches)) {
$headers[$matches[1]] = $matches[2];
}
}
$key = $headers['Sec-WebSocket-Key'];
$sKey = base64_encode(pack('H*', sha1($key.'258EAFA5-E914-47DA-95CA-C5AB0DC85B1')));
$strHeader = "HTTP/1.1 101 Switching Protocols \r\n".
"Upgrade: websocket\r\n".
"Connection: Upgrade\r\n".
"WebSocket-Origin: $host\r\n".
"WebSocket-Location: ws://$host:$port/feed/socket\r\n".
"Sec-WebSocket-Accept: $sKey\r\n\r\n"
;
socket_write($newSocket, $strHeader, strlen($strHeader));
}
}
Так вот, как запустить данный скрипт?
Везде смотрю, все запускает через консоль php -f testserver.php, какой файл нужно запускать и вообще нужно ли? Помогите разобраться!