跳到主要内容

套接字 (Socket)

访问组件

use Co\IO;

IO::Socket();

API

use Ripple\Socket\SocketStream;

// 创建一个套接字连接
public function connect(string $address, int $timeout = 0, mixed $context = null): StreamSocket;

// 监听一个套接字服务器
public function server(string $address, mixed $context = null): StreamSocket;

// 将套接字连接转换为SSL连接
public function enableSSL(SocketStream $stream): StreamSocket;

// 监听一个SSL套接字服务器
public function serverWithSSL(string $address, mixed $context = null): StreamSocket;

// 创建一个SSL套接字连接
public function connectWithSSL(string $address, int $timeout = 0, mixed $context = null): StreamSocket;

概述

建立套接字连接是ripple的一个重要功能, 通过套接字连接可以实现异步的网络通信, 例如: HTTP服务器, WebSocket服务器等。 访问Socket库的函数都会返回Promise对象, 你可以通过await关键字等待Promise对象的结果。或通过then方法处理异步结果。 Socket库隐藏了连接握手/SSL握手等细节, 你只需要关注业务逻辑即可。

例子

一个简单的例子说明Http服务器的实现,也是基础的SocketStream应用例子

use Co\IO;
use function Co\async;
use function Co\await;

async(function(){
$server = IO::Socket()->server('tcp://127.0.0.1:8008');

while(1){
$server->waitForReadable();
$client = $server->accept();

$client->write(
"HTTP/1.1 200 OK\r\n".
"Content-Type: text/html; charset=UTF-8\r\n".
"Content-Length: 11\r\n".
"\r\n".
"Hello World"
);
$client->close();
}
});

\Co\wait();