我正在尝试使用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) 我正在开发一个新项目,该项目应该通过 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)
这是我的问题:
为什么在尝试获取锁时只有 SWOOLE_SPINLOCK 有效,而所有其他锁都返回 false?
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) 我已经用php7安装了Laravel 5,并且可以在Windows机器上正常运行。最近,我知道SWOOLE对于PHP开发人员是有前途的工具!
不幸的是,我找不到用于Windows的任何SWOOLE安装程序。
如果可以,是否可以在Windows计算机上安装SWOOLE?
提前致谢。
我的问题是如何在Ubuntu 14.04 LTS 中安装 Swoole
我试过了
sudo pecl install swoole
Run Code Online (Sandbox Code Playgroud)
我收到了一些错误,已经在这里发布
有没有其他方法可以安装相同的...