您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman的AsyncTcpConnection类的connect 方法实现异步redis代理
发布时间:2021-12-04 23:48:36编辑:雪饮阅读()
connect 方法
void AsyncTcpConnection::connect()
执行异步连接操作。此方法会立刻返回。
注意:如果需要设置异步连接的onError回调,则应该在connect执行之前设置,否则onError回调可能无法被触发。
参数
无参数
返回值
无返回值
示例 Redis代理
<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 真实的redis地址,假设这里是本机6379端口
$REAL_REDIS_ADDRESS = 'tcp://127.0.0.1:6379';
// 代理监听本地4406端口
$proxy = new Worker('tcp://0.0.0.0:4406');
$proxy->onConnect = function(TcpConnection $connection)
{
global $REAL_REDIS_ADDRESS;
// 异步建立一个到实际redis服务器的连接
$connection_to_redis = new AsyncTcpConnection($REAL_REDIS_ADDRESS);
// redis连接发来数据时,转发给对应客户端的连接
$connection_to_redis->onMessage = function(AsyncTcpConnection $connection_to_redis, $buffer)use($connection)
{
$connection->send($buffer);
};
// redis连接关闭时,关闭对应的代理到客户端的连接
$connection_to_redis->onClose = function(AsyncTcpConnection $connection_to_redis)use($connection)
{
$connection->close();
};
// redis连接上发生错误时,关闭对应的代理到客户端的连接
$connection_to_redis->onError = function(AsyncTcpConnection $connection_to_redis)use($connection)
{
$connection->close();
};
// 执行异步连接
$connection_to_redis->connect();
// 客户端发来数据时,转发给对应的redis连接
$connection->onMessage = function(TcpConnection $connection, $buffer)use($connection_to_redis)
{
$connection_to_redis->send($buffer);
};
// 客户端连接断开时,断开对应的redis连接
$connection->onClose = function(TcpConnection $connection)use($connection_to_redis)
{
$connection_to_redis->close();
};
//这个onError不是AsyncTcpConnection类的onError而是外层TcpConnection的onError,所以放在AsyncTcpConnection的connect之后是没有问题的。
$connection->onError = function(TcpConnection $connection)use($connection_to_redis)
{
$connection_to_redis->close();
};
};
// 运行worker
Worker::runAll();
?>
实例运行:
[root@izj6c2jeancylo0ppo4vz5z workerman]# php test.php start
Workerman[test.php] start in DEBUG mode
---------------------------------------- WORKERMAN -----------------------------------------
Workerman version:4.0.22 PHP version:7.0.33
----------------------------------------- WORKERS ------------------------------------------
proto user worker listen processes status
tcp root none tcp://0.0.0.0:4406 1 [OK]
--------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
4406端口为redis的6379端口代理ok:
[root@izj6c2jeancylo0ppo4vz5z ~]# redis-cli -p 4406
127.0.0.1:4406> ping
PONG
127.0.0.1:4406>
6379直连也不影响:
[root@izj6c2jeancylo0ppo4vz5z ~]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
关键字词:workerman,AsyncTcpConnection,connect,redis,代理
相关文章
- workerman类TcpConnection的接口send
- workerman类TcpConnection的接口pipe通道实现流量控制
- workerman类TcpConnection的接口pauseRecv实现上传流
- workerman类TcpConnection的接口pauseRecv实现上传流
- workerman类TcpConnection的worker属性
- workerman类TcpConnection的id属性
- workerman类TcpConnection的protocol属性
- workerman类TcpConnection的回调属性onClose
- workerman类TcpConnection的回调属性onMessage
- workerman类TcpConnection的接口destroy