热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Laravel配置Swoole作为websocket服务器(一)

Laravel配置Swoole作为websocket服务器因为公司要做一个学生在线答题—老师监控的功能,并且可以实时同步学生的答题状态所以配置了swooleÿ

Laravel配置Swoole作为websocket服务器


因为公司要做一个学生在线答题 — 老师监控的功能,并且可以实时同步学生的答题状态 所以配置了swoole,当做websocket服务器。我这里用的扩展是laravel-s 来实现一个类似聊天室的功能。



版本信息


  • Laravel 8.0
  • hhxsv5/laravel-s 3.7
  • Swoole扩展 4.5.6
  • PHP 7.3

安装并配置Laravel-s扩展


  1. composer require "hhxsv5/laravel-s:~3.7.0" -vvv

  2. 发布laravel-s的配置文件 php artisan laravels publish

  3. 生成的文件在config/laravels.php中,需要关注的就几项:

    //第24行监听的ip
    'listen_ip' => env('LARAVELS_LISTEN_IP', '127.0.0.1'),
    //第35行监听的端口
    'listen_port' => env('LARAVELS_LISTEN_PORT', 5200),//第149行 需要修改如下:
    'websocket' => [ 'enable' => true, 'handler' => \App\Servers\WebSocketService::class,
    ],
    //第287行 修改 dispatch_mode
    'swoole' => [//...// dispatch_mode只能设置为2、4、5,https://wiki.swoole.com/#/server/setting?id=dispatch_mode'dispatch_mode' => env('LARAVELS_DISPATCH_MODE', 2),//...
    ],

    这里laravels需要一个handler类来响应websocket的各种事件,具体的代码 我会放到文末,也可以直接在laravels 文档中获取


配置nginx


这是laravels 默认的nginx配置文件 修改一下绑定的host就行了


gzip on;
gzip_min_length 1024;
gzip_comp_level 2;
gzip_types text/plain text/css text/Javascript application/json application/Javascript application/x-Javascript application/xml application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml;
gzip_vary on;
gzip_disable "msie6";
upstream swoole {# 通过 IP:Port 连接 这里的ip和端口 应该config中的配置保持一致server 127.0.0.1:5200 weight=5 max_fails=3 fail_timeout=30s;# 通过 UnixSocket Stream 连接,小诀窍:将socket文件放在/dev/shm目录下,可获得更好的性能#server unix:/yourpath/laravel-s-test/storage/laravels.sock weight=5 max_fails=3 fail_timeout=30s;#server 192.168.1.1:5200 weight=3 max_fails=3 fail_timeout=30s;#server 192.168.1.2:5200 backup;keepalive 16;
}
server {listen 80;# 别忘了绑Hostserver_name laravels.com;root /yourpath/laravel-s-test/public;access_log /yourpath/log/nginx/$server_name.access.log main;autoindex off;index index.html index.htm;# Nginx处理静态资源(建议开启gzip),LaravelS处理动态资源。location / {try_files $uri @laravels;}# 当请求PHP文件时直接响应404,防止暴露public/*.php#location ~* \.php$ {# return 404;#}location @laravels {# proxy_connect_timeout 60s;# proxy_send_timeout 60s;# proxy_read_timeout 120s;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;# “swoole”是指upstreamproxy_pass http://swoole;}
}

通过supervisord守护进程


  1. 添加supervisord配置文件 配置文件目录一般在 /etc/supervisor/conf.d

[program:laravel-s-test]
directory=/www/laravel
command=/usr/bin/php bin/laravels start -i
numprocs=1
autostart=true
autorestart=true
startretries=3
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log

directory 设置为laravel项目根目录即可。

command中需要正确定义 php可执行命令的地址。

stdout_logfile是输出的日志文件,需要保证user配置项中的用户有可写权限。


  1. 载入配置并重启supervisord

supervisorctl update && supervisorctl reload


尾巴

这篇主要记录一下配置之类的,免得自己忘记,其实可以直接看laravels的配置文档。

下一篇会记录 WebSocketService类中对websock事件的响应的业务代码


  • Laravels 中文文档:https://github.com/hhxsv5/laravel-s/blob/master/README-CN.md
  • Laravel 文档:https://learnku.com/docs/laravel/8.x


推荐阅读
  • laravel 使用腾讯云 COS5全教程
    laravel使用腾讯云COS5全教程一下载首先第一步肯定是用composer把包安装下来,这里是laravel5.8版本的,所以我用的是cos5 ... [详细]
  • 如何通过swoole加速laravel的问题?
    这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下再来复习一下吧,导致php慢的各种因素中解析性语言的 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了未找到类'MaddHatterLaravelFullcalendarServiceProvider'相关的知识,希望对你 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 【前端工具】nodejs+npm+vue 安装(windows)
    预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架&# ... [详细]
  • 拖拽验证:简单、便捷、安全
    最近看到一些拖拽验证码的帖子,本着好奇和研究学习的态度简单实现了第一版的拖拽验证项目地址:github.comRLOFLSdrag-captcha示例逻辑:apiphpDragge ... [详细]
  • php怎么创建项目目录,ThinkPHP 5.1自动生成模块及目录、文件
    试用一下ThinkPHP5.1这最新版的TP框架,创建项目很简单,在web根目录使用composer搞定:composercreate-p ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了解决mysql 5.1启动问题的方法,通过修改my.ini文件中的相关配置,包括innodb_data_home_dir和skip-innodb等,可以解决启动问题。同时还介绍了如何调整内存池来存储metadata信息。 ... [详细]
author-avatar
jessiemiumiu_956
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有