使用 PHP 连接到棘轮网络套接字服务器
Connecting to a ratchet websocket server using PHP
我是 运行 我后端的 Ratchet WebSocketServer,一切正常。
<?php
require '../vendor/autoload.php';
use Ratchet\WebSocket\WsServer;
use Ratchet\Http\HttpServer;
$wsServer = new WsServer(new Chat());
$wsServer->disableVersion(0);
$server = \Ratchet\Server\IoServer::factory(
new HttpServer(
$wsServer
),
8080
);
$server->run();
但我想使用普通 php 脚本连接到 websocket 以向服务器发送消息。
$host = 'ws://localhost'; //where is the websocket server
$port = 8080;
$local = "http://example.com"; //url where this script run
$data = "first message"; //data to be send
$head = "GET / HTTP/1.1"."\r\n".
"Upgrade: WebSocket"."\r\n".
"Connection: Upgrade"."\r\n".
"Origin: $local"."\r\n".
"Host: $host:$port"."\r\n".
"Sec-WebSocket-Key: asdasdaas76da7sd6asd6as7d"."\r\n".
"Content-Length: ".strlen($data)."\r\n"."\r\n";
//WebSocket handshake
$sock = fsockopen($host, $port);
fwrite($sock, $head ) or die('error:'.$errno.':'.$errstr);
$headers = fread($sock, 2000);
echo $headers;
fwrite($sock, $data) or die('error:'.$errno.':'.$errstr);
$wsdata = fread($sock, 2000);
fclose($sock);
但是我收到的错误是。
error:32744:Unable to find the socket transport "ws" - did you forget to enable it when you configured PHP?
然后当我更改主机并且不使用 ws:// 时,它说。
error:111:Connection refused
有谁知道如何将数据从普通 php 文件发送到 运行 Ratchet WebSocket 服务器?
我已经和 Ratchet 一起尝试过这个项目,它作为 PHP 客户端完美运行:
https://github.com/Textalk/websocket-php
安装:
composer require textalk/websocket 1.0.*
还有一个用法示例:
<?php
require('vendor/autoload.php');
use WebSocket\Client;
$client = new Client("ws://127.0.0.1:1234");
$client->send("Hello from PHP");
echo $client->receive() . "\n"; // Should output 'Hello from PHP'
我测试过,如果您使用 wss://(用于远程 websockets),这也适用于 SSL。
我是 运行 我后端的 Ratchet WebSocketServer,一切正常。
<?php
require '../vendor/autoload.php';
use Ratchet\WebSocket\WsServer;
use Ratchet\Http\HttpServer;
$wsServer = new WsServer(new Chat());
$wsServer->disableVersion(0);
$server = \Ratchet\Server\IoServer::factory(
new HttpServer(
$wsServer
),
8080
);
$server->run();
但我想使用普通 php 脚本连接到 websocket 以向服务器发送消息。
$host = 'ws://localhost'; //where is the websocket server
$port = 8080;
$local = "http://example.com"; //url where this script run
$data = "first message"; //data to be send
$head = "GET / HTTP/1.1"."\r\n".
"Upgrade: WebSocket"."\r\n".
"Connection: Upgrade"."\r\n".
"Origin: $local"."\r\n".
"Host: $host:$port"."\r\n".
"Sec-WebSocket-Key: asdasdaas76da7sd6asd6as7d"."\r\n".
"Content-Length: ".strlen($data)."\r\n"."\r\n";
//WebSocket handshake
$sock = fsockopen($host, $port);
fwrite($sock, $head ) or die('error:'.$errno.':'.$errstr);
$headers = fread($sock, 2000);
echo $headers;
fwrite($sock, $data) or die('error:'.$errno.':'.$errstr);
$wsdata = fread($sock, 2000);
fclose($sock);
但是我收到的错误是。
error:32744:Unable to find the socket transport "ws" - did you forget to enable it when you configured PHP?
然后当我更改主机并且不使用 ws:// 时,它说。
error:111:Connection refused
有谁知道如何将数据从普通 php 文件发送到 运行 Ratchet WebSocket 服务器?
我已经和 Ratchet 一起尝试过这个项目,它作为 PHP 客户端完美运行:
https://github.com/Textalk/websocket-php
安装:
composer require textalk/websocket 1.0.*
还有一个用法示例:
<?php
require('vendor/autoload.php');
use WebSocket\Client;
$client = new Client("ws://127.0.0.1:1234");
$client->send("Hello from PHP");
echo $client->receive() . "\n"; // Should output 'Hello from PHP'
我测试过,如果您使用 wss://(用于远程 websockets),这也适用于 SSL。