• laravel项目中的配置  原文出处:https://laravelacademy.org/post/19700.html,感谢原文作者让laravel这款可爱的php框架,进入了高并发的殿堂
如果你已经成功安装了laravelS组件,并用他接管了你的laravel项目,那么接下来就是实现一个websocket服务器的类,类声明在项目app目录下的Services(没有就自己建一个)目录,也许这些命名空间已经多的把你吓了一跳,但其实他们都源自你安装的laravelS组件,类的实现部分你也许并不感到陌生,没错,他们就是按照swoole websocket原生类进行了封装
Hhxsv5类空间的源码可以参照 项目空间下的vendor/hhxsv5/laravel-s/src/Swoole/Coroutine
<?phpnamespace App\Services;

use Hhxsv5\LaravelS\Swoole\WebSocketHandlerInterface;use Illuminate\Support\Facades\Log;use Swoole\Http\Request;use Swoole\WebSocket\Frame;use Swoole\WebSocket\Server;class mywebsocket implements WebSocketHandlerInterface{

    public function __construct()    {        Log::info('launching laravel-swoole websocket');    }

    public function onOpen(Server $server, Request $request)    {        Log::info('launching swoole websocket');        $server->push($request->fd,'欢迎使用,基于swoole的laravel websocket');    }

    public function onMessage(Server $server, Frame $frame)    {        $server->push($frame->fd,date('Y-m-dH:i:s').'服务器响应你的请求');    }

    public function onClose(Server $server, $fd, $reactorId)    {        Log::info('websocket服务器关闭');    }}

然后,你就要到config目录下找到laravels.php,进行一番配置。

找到下列关联数组的键名,并作配置

'websocket'                => ['enable' => true,'handler'=>\App\Services\mywebsocket::class,#这个就是上述声明的类//'handler' => XxxWebSocketHandler::class,],

'swoole' => [...// 每隔 60s 检测一次所有连接,如果某个连接在 600s 内都没有发送任何数据,则关闭该连接'heartbeat_idle_time'      => 600,'heartbeat_check_interval' => 60,...
],

  • nginx配置部分(分站点配置)
如果你对nginx多站点配置还感到陌生,可以随便搜罗一篇博文来看,这里的配置是在分站点目录vhosts下的,针对目标站点的 .conf文件进行配置的,如果你急于上机,不妨全部拷贝,把域名更改过来

map $http_upgrade $connection_upgrade #这行代码的目的是把http协议 “提升”到websocket协议的标准{default upgrade;''      close;
}
upstream laravels {#server后面是需要监听的ip地址,如果你使用了docker容器部署你的项目,那server后面跟的是容器名# Connect IP:Portserver yinti.com:5200 weight=5 max_fails=3 fail_timeout=30s;keepalive 16;
}server {listen       88;#端口可以根据项目实际需要进行调整server_name yinti.com;root  /dingshub2/yinti/public;index index.html index.htm index.php;location / {# WordPress固定链接URL重写try_files $uri @laravels;}# PHP配置location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;include        fastcgi_params;}#下面这段是websocket服务器的具体部署实现location =/ws {# proxy_connect_timeout 60s;# proxy_send_timeout 60s;# proxy_read_timeout: Nginx will close the connection if the proxied server does not send data to Nginx in 60 seconds; # At the same time, this close behavior is also affected by heartbeat setting of 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_connect_timeout 60s;# proxy_send_timeout 60s;# proxy_read_timeout 60s;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;
    }#我部署的静态资源服务器,你的项目可有可无location ~ .*\.(gif|jpg|jpeg|png|js|css)$ {expires 24h;root /dingshub2/yinti/public/static;proxy_store on;proxy_store_access user:rw group:rw all:rw;proxy_temp_path /dingshub2/yinti/public/static;#图片访问路径proxy_redirect off;proxy_set_header Host 127.0.0.1;client_max_body_size 10m;client_body_buffer_size 1280k;proxy_connect_timeout 900;proxy_send_timeout 900;proxy_read_timeout 900;proxy_buffer_size 40k;proxy_buffers 40 320k;proxy_busy_buffers_size 640k;proxy_temp_file_write_size 640k;if ( !-e $request_filename){proxy_pass http://127.0.0.1;#默认80端口
    }}
}

  • html实现部分(blade模版,继承了母版页)
@extends('masterpage.chatroom')@section('passage')<div class="pricing-header px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center"><h1 class="display-4">帅哥聊天室</h1><p class="lead">四海之内皆兄弟,请文明交流</p></div>
@endsection@section('pad')<div class="card-deck mb-3"><div class="card mb-10 box-shadow"><div class="card-header"><h4 class="my-0 font-weight-normal  text-center">交流板</h4></div><div class="card-body"><h1 class="card-title pricing-card-title"> <small class="text-muted"></small></h1><textarea id="chatpad" class='form-control' cols="90" rows="20"></textarea><p style="margin-left: 2px" class="my-0 font-weight-normal">消息输入框</p><textarea class='form-control'  cols="90" rows="8"></textarea><br><button id="joinin" type="button" class="btn btn-lg btn-block btn-outline-primary">进入聊天室</button></div></div></div>
@endsection@section('tailscript')<script src="{{asset(config('mystatic._js_').'/jquery-3.3.1.min.js')}}" ></script><script src="{{asset(config('mystatic._myjs_').'/joinintalk.js')}}"></script>
@endsection

  • js具体实现----点击按钮即实现websocket服务器的连接
$("#joinin").click(function()
{var mysocket = new WebSocket('ws://yinti.com:5200/ws');mysocket.onopen=function (event) {$("#chatpad").val("");$("#chatpad").val("大家好!音提来了\n");};});

(未完待续)

转载于:https://www.cnblogs.com/saintdingspage/p/11272418.html

在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章)相关推荐

  1. 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(一)

    注意,这种风格的服务端需要swoole4.4以上,这种风格的服务端需要swoole4.4以上,这种风格的服务端需要swoole4.4以上,重要的事情说三遍!!! 服务端 <?php //name ...

  2. 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(二)---静态文件如何部署...

    目前,较为成熟的技术是采用laravelS组件,注意和laravel 区别laravelS多了一个大写的S,由于laravelS默认监听5200端口,所以laravel项目要做一些调整 例如: 静态文 ...

  3. 在laravel5.8中集成swoole组件----初步测试

    铺垫 前提是先安装swoole组件,我采用从pecl-----php扩展组件网下载swoole扩展包,然后切入到解压缩的扩展包中运行phpize命令, phpize是一种编译命令,可以在安装文件中生成 ...

  4. DSAPI多功能组件编程应用-HTTP监听服务端与客户端

    本文中,演示了使用DSAPI.网络相关.HTTP监听,快速建立服务端和客户端. HTTP监听服务端的作用,是监听指定计算机端口,以实现与IIS相同的解析服务,提供客户端的网页请求,当然,这不仅仅是应用 ...

  5. Java中Socket通信-服务端和客户端双向传输字符串实现

    场景 什么是socket 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台计算机可以接收其他计算机 ...

  6. 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...

    由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...

  7. IMI 基于 Swoole 开发的协程 PHP 开发框架 常驻内存、协程异步非阻塞

    介绍 IMI 是基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存.协程异步非阻塞IO等优点. IMI 框架文档丰富,上手容易,致力于让开发者跟使用传统 MVC 框架一样顺手. IMI 框 ...

  8. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  9. php启用 asynchdns,在 PHP 中使用 Promise + co/yield 协程

    摘要: 我们知道 JavaScript 自从有了 Generator 之后,就有了各种基于 Generator 封装的协程.其中 hprose 中封装的 Promise 和协程库实现了跟 ES2016 ...

最新文章

  1. hdu2830 可交换行的最大子矩阵
  2. 20190703 关于如何驱动
  3. 9、C语言中sscanf使用及运算符优先级
  4. 正则表达式的环视实际应用案例
  5. 非 GUI 模式运行 JMeter 压力测试
  6. 软件工程作业 - word count
  7. Git + GitHub 超详细知识笔记整理
  8. c语言学习-输出9*9乘法口诀表
  9. 【tips】编译epic异常解决
  10. 数据结构笔记(三十一)--折半查找
  11. freeRADIUS下EAP测试
  12. python开发环境规范——pycharm
  13. VMware vSphere client 5.1登录出现这个错误:客户端无法向服务器发送完整请求
  14. 局域网上传文件_3分钟内Windows网盘搭建并实现局域网文件共享
  15. CGLIB 动态代理使用
  16. LM2596和LM2576区别,开关电源芯片LM2576和LM2596为什么开关频率越高,输出接电感值和电容值就越小呢?电感电容体积小,有利于减小开关电源整体模块的体积
  17. 什么是网络编程(一)
  18. CF 3-6 2级组 D题 STRESSFUL TRAINING 紧张的比赛
  19. ROG手机张舜翔:把游戏体验感当成游戏手机的重要支柱
  20. Lock锁及获取锁的四种方法

热门文章

  1. echarts 山东地图_用Python画中国地图,实现各省份数据可视化
  2. ps一点等于多少厘米_劝告大家:女人40岁后,体重多少算正常?太瘦也不好
  3. RTP/RTCP/RTSP协议初探
  4. [Pro*c]滚动游标变量的使用
  5. TCPDUMP/LIBPCAP 3-PCAP's MAN手册(1)
  6. [Redux/Mobx] 说说redux的优缺点分别是什么?
  7. React开发(132):ant design学习指南之form中控制展开和关闭逻辑
  8. 前端学习(2910):vue的介绍
  9. [html] 页面刷新时sessionStroage会变(会清空)吗?
  10. [vue] 说下你对指令的理解?