Laravel6使用hhxsv5/laravel-s实现高性能webSocket服务

Laravel从入门到精通:开启高效开发之旅 本文围绕 Laravel 展开全面介绍,涵盖基础入门、核心组件、高级特性、常见问题及实战案例等内容。首先介绍 Laravel 概念与特性,详细阐述开发环境搭建、项目初始化步骤。接着深入剖析路由、控制器、模型等核心组件,以及中间件、事件与监听器等高级特性的使用。同时针对常见的环境配置、代码错误和性能优化问题给出解决方案。以小型博客系统为例进行实战演练,包含需求分析、架构设计、功能实现和部署上线。最后总结学习要点,展望 Laravel 在性能、安全、生态及融合新技术等方面的未来发展。 阅读详情

接上篇
1.修改config/laravels.conf配置文件

'websocket'      => [
    'enable'  => true, // 看清楚,这里是true
    'handler' => \App\Services\WebSocketService::class,
],
'swoole'         => [
    //...
    // dispatch_mode只能设置为2、4、5,https://wiki.swoole.com/wiki/page/277.html
    'dispatch_mode' => 2,
    //...
],

2.在app文件夹下新建Services.php文件

namespace App\Services;
use Hhxsv5\LaravelS\Swoole\WebSocketHandlerInterface;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
use Swoole\WebSocket\Server;
/**
 * @see https://wiki.swoole.com/wiki/page/400.html
 */
class WebSocketService implements WebSocketHandlerInterface
{
    // 声明没有参数的构造函数
    public function __construct()
    {
    }
    public function onOpen(Server $server, Request $request)
    {
        // 在触发onOpen事件之前Laravel的生命周期已经完结,所以Laravel的Request是可读的,Session是可读写的
        // \Log::info('New WebSocket connection', [$request->fd, request()->all(), session()->getId(), session('xxx'), session(['yyy' => time()])]);
        $server->push($request->fd, 'Welcome to LaravelS');
        // throw new \Exception('an exception');// 此时抛出的异常上层会忽略,并记录到Swoole日志,需要开发者try/catch捕获处理
    }
    public function onMessage(Server $server, Frame $frame)
    {
        // \Log::info('Received message', [$frame->fd, $frame->data, $frame->opcode, $frame->finish]);
        $server->push($frame->fd, date('Y-m-d H:i:s'));
        // throw new \Exception('an exception');// 此时抛出的异常上层会忽略,并记录到Swoole日志,需要开发者try/catch捕获处理
    }
    public function onClose(Server $server, $fd, $reactorId)
    {
        // throw new \Exception('an exception');// 此时抛出的异常上层会忽略,并记录到Swoole日志,需要开发者try/catch捕获处理
    }
}

3.新建一个控制器和视图和路由

<?php
namespace App\Http\Controllers;
class IndexController extends Controller
{
    public function index()
    {
        return view('index');
    }
}

view视图

<div style="width:600px;margin:0 auto;border:1px solid #ccc;">
    <div id="content" style="overflow-y:auto;height:300px;"></div>
    <hr />
    <div style="height:40px;background:white;">
        <input type="text" class="form-control" id="message"  placeholder="请输入内容">
        <button type="button" class="btn btn-primary" onclick="sendMessage()">Primary</button>
    </div>
</div>

<script type="text/javascript">
    if(window.WebSocket){
        // 端口和ip地址对应不要写错
        var webSocket = new WebSocket("ws://外网ip:5200");
        webSocket.onopen = function (event) {
            console.log('webSocket 链接成功');
        };
        // 连接关闭时触发
        webSocket.onclose = function (event) {
            console.log("WebSocket 关闭连接");
        }

        //收到服务端消息回调
        webSocket.onmessage = function (event) {
            var content = document.getElementById('content');
            content.innerHTML = content.innerHTML.concat('<p style="margin-left:20px;height:20px;line-height:20px;">'+event.data+'</p>');
            console.log(event.data)
        }

        var sendMessage = function(){
            var data = document.getElementById('message').value;
            webSocket.send(data);
        }
    }else{
        console.log("您的浏览器不支持WebSocket");
    }
</script>

web.php

Route::get('/a','IndexController@index');

nginx配置

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
upstream laravels {
    # Connect IP:Port
    server 127.0.0.1:5200 weight=5 max_fails=3 fail_timeout=30s;
    keepalive 16;
}

server {
server_name xxx.com;
listen 80 ;
        root /home/www/laravel_swoole/public;
        index index.html index.htm index.php;
location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME  /data$fastcgi_script_name;
        include fastcgi_params;
         include        fastcgi.conf;
    }

 location / {
        try_files $uri @laravels;
    }

 location =/ws {
        # proxy_connect_timeout 60s;
        # proxy_send_timeout 60s;
        # proxy_read_timeout:如果60秒内被代理的服务器没有响应数据给Nginx,那么Nginx会关闭当前连接;同时,Swoole的心跳设置也会影响连接的关闭
        # proxy_read_timeout 60s;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header Server-Protocol $server_protocol;
        proxy_set_header Server-Name $server_name;
        proxy_set_header Server-Addr $server_addr;
        proxy_set_header Server-Port $server_port;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_pass http://laravels;
    }


 location @laravels {
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header Server-Protocol $server_protocol;
        proxy_set_header Server-Name $server_name;
        proxy_set_header Server-Addr $server_addr;
        proxy_set_header Server-Port $server_port;
        proxy_pass http://laravels;
    }
}

在这里插入图片描述
https://www.bookstack.cn/read/LaravelS/spilt.8.d7f5aa7b24640641.md
https://xueyuanjun.com/post/19700
https://blog.youkuaiyun.com/zhangzeshan/article/details/101852666

LaravelS:基于Swoole的Laravel/Lumen高性能服务化适配器 可用于运行定时任务、后台监听等场景:sleep(10);这类进程独立于 Worker,适合长时间运行的任务。Swoole 不是银弹,但它确实为 PHP 开辟了一条通往高性能服务的新路径。结合laravel-s,我们可以在不放弃 Laravel 开发效率的前提下,轻松构建高并发、低延迟的现代 Web 应用。无论是 API 服务、实时聊天、在线教育、直播互动,还是物联网网关,这套组合都能胜任。关键在于:理解其运行机制,规避常驻内存的风险,善用异步能力,做好监控与容灾。 阅读详情

相关推荐

手把手教你用ArduPilot搭建低成本无人车(附APM飞控+有刷电调配置清单)

本文提供了一份基于ArduPilot开源平台搭建低成本智能无人车的详细实战指南。核心内容包括APM架构飞控的选型、双向有刷电调的兼容性配置与校准、系统连接逻辑,以及通过Mission Planner地面站进行参数调校和自主导航功能设置的完整流程,帮助爱好者快速实现从手动控制到自主行驶的跨越。

java5的博客 850

laravel之laravel-s组件技术指南

介绍 laravel框架入门可参见(《laravel入门及技术指南》https://blog.youkuaiyun.com/yan_dk/article/details/117375890),laravel结合swoole,可以实现高性能Http服务,提升应用性能。hhxsv5/laravel-s是第三方的组件包,我们可以安装使用。 参考 Laravel6使用hhxsv5/laravel-s实现高性能Http服务https://blog.youkuaiyun.com/php12345679/ar...

yan_dk的专栏 1234

Unity2019编译器下使用Ump无错误,打包exe不播放 或 将exe文件在其他电脑下运行不播放

一、unity编译器下使用UMP可以播放视频,打包后查看debug 出现错误 UnloadTime: 1.070900 ms Fallback handler could not load library F:/PCTest/AccessControlSysteam/jfmx_Data/Mono/libdl Fallback handler could not load library F:/PCTest/AccessControlSysteam/jfmx_Data/Mono/libdl.dll Fa.

qq_42345116的博客 4700

在laravel中集成swoole,使用hhxsv5/laravel-s扩展

laradock 配置swoole以及简单的demo

ertty34的博客 3002

primetime如何做voltage scaling

存在这样的情况,标准单元库只有ssgnp0p72vm40c和ssgnp0p9vm40c的libs,但是我们希望它工作在ssgnp0p76vm40c,这样的话就需要用ssgnp0p72vm40c和ssgnp0p9vm40c的libs来scaling出ssgnp0p76vm40c的lib。

qq_34326957的博客 1685

模电(十四)差分放大电路

目录 差分放大电路 双端输入双端输出 Q点分析 抑制共模信号 放大差模信号 双端输入单端输出 Q点分析 差模信号分析 共模信号分析 单端输入双端输出 单端输入单端输出 四种接法比较 具有恒流源的差分放大电路 差分放大电路的改进 差分放大电路 采用引入支流负反馈,温度补偿来克服零点漂移(温度变化,直流电源波动,元器件老化产生的输入电压为零,输出电压不为零的...

weixin_43674847的博客 2万+

laravels插件安装与配置

laravels是一个插件,用于快速集成swoole到laravel,然后赋予他们更好的性能。 安装第一步: 环境要求 PHP >= 5.5.9 Swoole >= 1.7.19 larael >= 5.1 环境查看: php -v cc -v openssl version php --ri swoole 安装swoole sudo wget https://github.com/swoole/swoole-src/archive/v4.0.4.zip sudo unzip v4.0.

weixin_41429587的博客 932

S4-FPGA-K7板级原理图硬件实战

xilinx K7板级硬件实战

weixin_66510961的博客 6153

laravel-s实现高性能webSocket服务

laravel-s实现高性能webSocket服务1 安装基于 LaravelS 构建 HTTP 服务器2 在 Laravel 中集成 Swoole 实现 WebSocket 服务器1 修改配置文件2 创建 WebSocketService 类3 测试新建一个控制器和视图和路由view视图预览效果 1 安装 首先PHP需要安装swoole扩展,仅支持 Linux、FreeBSD、MacOS 三种操作系统。 安装 laravel,安装 LaravelS 扩展包。 [root@bogon laravels]#

wgchen 2450

SRA数据库

简介 序列读取存档(sequence Read Archive,SRA)数据是可通过多个云提供商和NCBI服务器获得的,它是最大的可公开获得的高通量测序数据存储库。 SRA接受来自生活各个部门以及宏基因组学和环境调查的数据。 SRA存储原始测序数据和比对信息,以提高可重复性并通过数据分析促进新发现。 NCBI网站储存二代测序原始数据的数据库 SRA官网 从Entrez搜索结果中下载SRA序列 例如查找SRA Entrez中BALB / c小鼠淋巴结组织的RNA-Seq记录 获取搜索结果 SRA se

qq_44520665的博客 5913

【2025年五一数学建模竞赛】A题 完整论文 模型建立与求解

2025年五一数学建模竞赛 A题:基于历史数据与模式识别的道路车流量推测模型研究

Magnolia_He的博客 3783

laravel下安装laravels以及websocket的使用

laravel下安装laravels以及websocket的使用 LaravelS 是 Swoole 和 Laravel/Lumen 之间开箱即用的适配器。 环境要求安装运行与Nginx配合使用(推荐)启用WebSocket服务器HTML实战代码实战截图 环境要求 依赖 说明 PHP >= 5.5.9 推荐PHP7+ Swoole >= 1.7.19 从2.0.12开始不再支持PHP5 推荐4.2.3+ Laravel/Lumen >= 5.1

WXiangQian 1万+

汇川Easy系列斜坡函数功能块(支持状态输出)

IN rSetValue REAL 0.000000 0.000000 不保持 目标值 1IN rMaxValue REAL 0.000000 0.000000 不保持 最大目标值 2IN rMinValue REAL 0.000000 0.000000 不保持 最小目标值 3IN rSmoothTime REAL 100.000000 100.0000 不保持 最小到最大值平滑时间 单位 秒 4IN diTs DINT 10 10 不保持 函数调用周期采样时间中断时间 5。

RXXW_Dor的博客 458

LaravelS 入门指南:5分钟快速搭建高性能 Laravel 服务器

LaravelS 是一个开箱即用的 Laravel/Lumen 与 Swoole 适配器,能够帮助开发者快速搭建高性能的 Laravel 服务器。它充分利用 Swoole 的异步、并发特性,显著提升 Laravel 应用的性能表现,是构建高性能 Web 应用的理想选择。 ## 为什么选择 LaravelS? LaravelS 作为 Laravel 与 Swoole 之间的桥梁,为应用带来了诸多

gitblog_00643的博客 943

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

如何在Laravel5.6中使用Swoole的协程数据库查询

这篇文章主要介绍了在Laravel5.6中使用Swoole的协程数据库查询,详细的介绍了什么是Swoole,以及Laravel5.6中使用Swoole,非常具有实用价值,需要的朋友可以参考下 什么是Swoole 直接套用Swoole官网的介绍:PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步R...

weixin_43814458的博客 805

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

laravel-s加速swoole

通过Composer安装(packagist)。必须是3.7版本3.5会报错 composer require "hhxsv5/laravel-s:~3.7.0" # 确保你的composer.lock文件是在版本控制中 2.注册Service Provider(以下两步二选一)。 Laravel: 修改文件config/app.php,Laravel 5.5+支持包自动发现,你应该跳过这步 'providers' => [//...Hhxsv5\LaravelS\Illuminate..

飞鱼计划 3282

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

laravel异步mysql_如何在Laravel5.6中使用Swoole的协程数据库查询

这篇文章主要介绍了在Laravel5.6中使用Swoole的协程数据库查询,详细的介绍了什么是Swoole,以及Laravel5.6中使用Swoole,非常具有实用价值,需要的朋友可以参考下什么是Swoole直接套用Swoole官网的介绍:PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据...

weixin_31487521的博客 257

PC中后台WebSocket新订单实时语音通知解决方案探索

SaaS产品中后台常常会有这样的需求,业务端新下了订单,管理员登录PC端后,应该能实时接收到一条语音通知:您有新的订单,请注意查收。如果支持多点登录,在多个登录窗口还需要查看与接收到该条消息。

会勇禾口王阅读帮助生产价值 1396

LaravelS WebSocket服务踩坑实录:从`enable =&gt; true`到消息成功推送

本文详细记录了在Laravel框架中使用LaravelS结合Swoole实现高性能WebSocket服务的完整过程,从环境配置、消息推送到性能优化,提供了实战中遇到的常见问题及解决方案,帮助开发者高效构建实时通信功能。

weixin_30689307的博客 490

告别PHP-FPM!用LaravelS+Swoole在Nginx下搭建WebSocket聊天室(含完整配置)

本文详细介绍了如何利用LaravelS和Swoole替代PHP-FPM,构建高性能的WebSocket聊天室服务。通过环境准备、Nginx配置迁移、WebSocket服务实现及生产环境优化等步骤,帮助开发者提升实时应用的性能和并发能力,特别适合聊天应用和实时通知场景。

weixin_30836759的博客 449

php swoole 实时弹幕,基于 Swoole 实现支持高并发的实时弹幕功能(下)

基于 Swoole 实现支持高并发的实时弹幕功能(下)由 学院君 创建于1年前, 最后更新于 1年前版本号 #112184 views6 likes0 collects我们接着上篇教程来完成弹幕服务端以及客户端与服务端交互的开发,首先来实现服务端 WebSocket 服务器的编码。WebSocket 服务器我们参照之前的功能介绍教程《在 Laravel 中集成 Swoole 实现 WebSocke...

weixin_39939303的博客 593

php swoole 推送 并发,基于 Swoole 实现支持高并发的实时弹幕功能(下)

基于 Swoole 实现支持高并发的实时弹幕功能(下)由 学院君 创建于1年前, 最后更新于 1年前版本号 #111881 views6 likes0 collects我们接着上篇教程来完成弹幕服务端以及客户端与服务端交互的开发,首先来实现服务端 WebSocket 服务器的编码。WebSocket 服务器我们参照之前的功能介绍教程《在 Laravel 中集成 Swoole 实现 WebSocke...

weixin_32001433的博客 666

laravel安装laravel-s

1.安装swoole.so扩展 https://blog.youkuaiyun.com/weixin_45080962/article/details/118695436?spm=1001.2014.3001.5501 2.安装laravel-s composer require hhxsv5/laravel-s 复制配置文件到config下 php artisan laravels public laravels.conf 文件配置修改 'listen_ip' => env('LARAVELS_LISTE

weixin_45080962的博客 724

没想到Laravel-S能提升这么高性能

最近公司接了一个基于laravel二开项目,客户对于高并发要求比较高,传统的部署laravel项目测试发现已经达到瓶颈,后来发现Laravel-S可以快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能于是就试了下,没想到结果大大出乎我的意料,性能大幅度提升,客户也很满意。下面说下具体流程: 1.引入依赖 composerrequirehhxsv5/la...

智行晓东的博客 2079

laravel laravel-s hyperf 压测

并发参考 测下来hyperf表现最好

qq_29755359的博客 1833

Laravel 使用 laravel-s 引发登陆状态问题(所有终端都登陆)

说下这次血的教训吧? 熟悉我的人,可能知道我的这个小站 是由 Laravel 建立的,目前我的版本变更为 Laravel 6.x 了,然后今天我发现所有客户端,所有人都登陆着我的账号。我靠,把我给吓了一跳。(幸亏是我最近才开始升级写的,也没几天) 赶紧找原因,分析问题。找了半天发现是我使用 la...

hedeqiang 863
上一篇: Laravel6使用hhxsv5/laravel-s实现高性能Http服务
下一篇: Redis5.x用cluster搭建集群
苦艾酒丶
博客等级 码龄9年 41粉丝 99原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值