как послать из php данные на nodejs websocket сервер

180
08 июля 2022, 15:40

Прошу помощи. Мне необходимо посылать данные из php7.3 в вебсокет сервер на nodejs. Сервер работает норм, порт слушает, все ок. Клиент с морды сайта коннектится и все работает, сообщения отправляются и прочее. А вот из php никак не получается, кладу код в файл, обращаюсь к нему через браузер, а сам смотрю в консоли терминалки Putty - будет ли хоть какая реакция на коннект, тишина. Из браузера - все отлично, из php - ничего. Подскажите, куда копать и что делать? Ниже - упрощенный но вполне валидный и работоспособный (в части сервера и клиента js точно) код

клиент

let ws = new WebSocket("ws://domain.ru:49470");
ws.send("Привет!");

сервер

const path = "/usr/lib/node_modules/";
var WebSocketServer = require(path + 'ws').Server, 
wss = new WebSocketServer({ port: 8000 }); 

wss.on('connection', function connection(client) 
{
    console.log("куку")
    client.on('message', function incoming(message) 
    {
        client.send(message);
    });
});

Php

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, 'localhost', 8000);
if(!$result) 
{
    die('cannot connect '.socket_strerror(socket_last_error()).PHP_EOL);
}
$bytes = socket_write($socket, "Hello World");

PHP Curl версия

$url = "http://localhost:8000";
$filedata = array();
$ch = curl_init($url);
$header = "cache-control: no-cache; content-type: application/json;";
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($filedata));
$returned = curl_exec($ch);
curl_close($ch);
Answer 1

php websocket client

проще не куда

<?php
require 'vendor/autoload.php';
use Amp\Websocket\Client;
Amp\Loop::run(function () {
    /** @var Client\Connection $connection */
    $connection = yield Client\connect('ws://localhost:1337/ws');
    // do something
});
READ ALSO
Модификация без словаря

Модификация без словаря

Дано следующее задание: Вводится текстКонец ввода F1

190
Нет расстановки по убыванию [дубликат]

Нет расстановки по убыванию [дубликат]

Подскажите пожалуйста , как решить проблемуВвожу текст , жму F3 и программа завершается без расстановки

237
TcpClient не принимает данные

TcpClient не принимает данные

Есть код принятия данных с TcpClientОн работает в таске, имитирующем клиент, но не в классе клиента

177