标签: swoole

与RabbitMQ一起玩

我正在尝试使用websockets将一些数据从php应用程序发送到用户的浏览器.因此我决定将Swoole与RabbitMQ结合使用.

这是我第一次使用websockets并在阅读了一些关于Socket.IO,Ratchet等的帖子后,我决定停止使用Swoole,因为它是用C编写的,并且可以方便地与php一起使用.

这就是我理解使用websockets启用数据传输的想法:1)在CLI中启动RabbitMQ worker和Swoole服务器2)php应用程序向RabbitMQ发送数据3)RabbitMQ向worker发送带有数据的消息4)Worker接收带有数据的消息+建立与Swoole套接字服务器的套接字连接.5)Swoole服务器向所有连接广播数据

问题是如何将Swoole套接字服务器与RabbitMQ绑定?或者如何让RabbitMQ与Swoole建立连接并向其发送数据?

这是代码:

Swoole服务器(swoole_sever.php)

$server = new \swoole_websocket_server("0.0.0.0", 2345, SWOOLE_BASE);

$server->on('open', function(\Swoole\Websocket\Server $server, $req)
{
    echo "connection open: {$req->fd}\n";
});

$server->on('message', function($server, \Swoole\Websocket\Frame $frame)
{
    echo "received message: {$frame->data}\n";
    $server->push($frame->fd, json_encode(["hello", "world"]));
});

$server->on('close', function($server, $fd)
{
    echo "connection close: {$fd}\n";
});

$server->start();
Run Code Online (Sandbox Code Playgroud)

工作者从RabbitMQ接收消息,然后连接到Swoole并通过套接字连接(worker.php)广播消息

$connection = new AMQPStreamConnection('0.0.0.0', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('task_queue', false, true, false, false);

echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";

$callback = function($msg){
    echo " …
Run Code Online (Sandbox Code Playgroud)

php sockets rabbitmq websocket swoole

7
推荐指数
1
解决办法
1225
查看次数

在 PHP 中使用 Swoole 锁

我正在开发一个新项目,该项目应该通过 Swoole 扩展来实现。

这是 swoole 锁的文档: https://www.swoole.co.uk/docs/modules/swoole-lock

以下是支持的锁类型:

SWOOLE_FILELOCK: file lock
SWOOLE_RWLOCK: read write lock
SWOOLE_SEM: Linux semaphore
SWOOLE_MUTEX: Mutex
SWOOLE_SPINLOCK: spin lock
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 为什么在尝试获取锁时只有 SWOOLE_SPINLOCK 有效,而所有其他锁都返回 false?

  2. SWOOLE_RWLOCK模式下如何加锁读或写,以及如何释放读或写锁?文档只提到获取读锁(正如我在 #1 中所说,它总是返回 false)。


执行结果:

SWOOLE_RWLOCK:

$lock_1 = new swoole_lock(1);
$lock_2 = new swoole_lock(1);

var_dump($lock_1->lock_read());
// result: bool(false)

var_dump($lock_2->lock());
// result: bool(false)
Run Code Online (Sandbox Code Playgroud)

SWOOLE_MUTEX:

$lock = new swoole_lock(3);

var_dump($lock->lock());
// result: bool(true)
// It's funny that this lock was not working when I asked the question and now it's working!
Run Code Online (Sandbox Code Playgroud)

SWOOLE_SEM:

$lock = …
Run Code Online (Sandbox Code Playgroud)

php mutex semaphore spinlock swoole

5
推荐指数
0
解决办法
1225
查看次数

是否可以在Windows计算机中安装Swoole?

我已经用php7安装了Laravel 5,并且可以在Windows机器上正常运行。最近,我知道SWOOLE对于PHP开发人员是有前途的工具!

不幸的是,我找不到用于Windows的任何SWOOLE安装程序。

如果可以,是否可以在Windows计算机上安装SWOOLE?

提前致谢。

php windows swoole

5
推荐指数
2
解决办法
1871
查看次数

如何在 ubuntu 中安装 Swoole

我的问题是如何在Ubuntu 14.04 LTS 中安装 Swoole

我试过了

sudo pecl install swoole
Run Code Online (Sandbox Code Playgroud)

我收到了一些错误,已经在这里发布

有没有其他方法可以安装相同的...

swoole

3
推荐指数
1
解决办法
5203
查看次数

标签 统计

swoole ×4

php ×3

mutex ×1

rabbitmq ×1

semaphore ×1

sockets ×1

spinlock ×1

websocket ×1

windows ×1