laravel连接远程socket服务器,订阅及读取信息最优雅的方式?

我们都清楚 js和Python都有订阅和读取的方式,那么laravel呢?
我查找了一些资料,但大部分都是作为socket服务器端进行使用的,那么客户端怎么使用呢?
首先,谢谢大家的答案,是我的问题没有表述清楚
回答的大部分都是如何实例化一个客户端和实例化的时候发送消息
具体的问题是这样的:

  1. 在laravel里面如何实例化socket客户端并连接启动它?
  2. 实例化之后如何在其他地方发送消息?
  3. 如何合理的读取接收到的消息(因为socket消息接收比较频繁)?
    再次谢谢大家
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

可以使用workerman之类的作为客户端链接socket服务器监听事件!

2年前 评论
UpGod (楼主) 2年前
xingkong

laravels 了解下

2年前 评论

不管是workerman 或者 laravels 有没有具体的作为客户端使用的案例呀?是客户端不是服务器端! @Imuyu @

2年前 评论

使用swoole提供的websocket客户端

2年前 评论

@UpGod 看文档要仔细 doc.workerman.net/faq/as-wss-client...

Laravel

2年前 评论
UpGod (楼主) 2年前
UpGod (楼主) 2年前
Imuyu (作者) 2年前
UpGod (楼主) 2年前

我说一下我当前知识面下的解决方案,我的项目还是允许折腾的,所以我接触的是 Swoole。在安装了 Swoole 扩展情况下,我起一个服务端,然后再写一个客户端去连接,这里的客户端代码可能就是你需要了解的。 当然正式项目中更推荐使用成熟的请求库,这也是 Swoole 官方推荐的方式:github.com/swlib/saber

Server 端 ws_server.php

<?php

//创建WebSocket Server对象,监听0.0.0.0:9502端口
$ws = new Swoole\WebSocket\Server('0.0.0.0', 9502);

//监听WebSocket连接打开事件
$ws->on('Open', function ($ws, $request) {
    $ws->push($request->fd, "hello, welcome\n");
});

//监听WebSocket消息事件
$ws->on('Message', function ($ws, $frame) {
    if ($ws->exist($frame->fd)) {
        echo "Message: {$frame->data}\n";
        $ws->push($frame->fd, "server: {$frame->data}");
    }
});

//监听WebSocket连接关闭事件
$ws->on('Close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->start();

客户端 ws_client.php

<?php

use Swoole\Coroutine;
use Swoole\Coroutine\Http\Client;
use function Swoole\Coroutine\run;

run(function () {

    # 创建 Http 客户端
    $client = new Client('127.0.0.1', 9502);
    # 将 Http 客户端升级为 Websocket 客户端
    $ret = $client->upgrade('/');

    # 写个循环发消息,可以是其他任意自定义代码
    if ($ret) {
        while(true) {
            $client->push('hello');
            var_dump($client->recv());
            Coroutine::sleep(1);
        }
    }
});
2年前 评论
UpGod (楼主) 2年前

目前我这边是单向的,还没有用到双向交互,laravel后端向其它socket客户端发送消息是通过redis与socket配合来进行的,之前写了篇文章记录了下,希望能够帮到你。

2年前 评论
UpGod (楼主) 2年前

用gatewayWorker :smile:我正在看

2年前 评论

直接用Pusher做服务端,非常简单

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!