专栏首页Owen's Worldworkerman的websocket的wss实例
原创

workerman的websocket的wss实例

本文环境 CentOS8.0,PHP8.1,Nginx1.8,Workerman 4.0\ 不懂的可以评论联系我 著作权归OwenZhang所有。商业转载请联系OwenZhang获得授权,非商业转载请注明出处。

workerman介绍

Workerman是一款纯PHP开发的开源高性能的PHP 应用容器。

Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。

实际上Workerman类似一个PHP版本的nginx,核心也是多进程+Epoll+非阻塞IO。Workerman每个进程能维持上万并发连接。由于本身常驻内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能。同时支持TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协议以及各种自定义协议。拥有定时器、异步socket客户端、异步Redis、异步Http、异步消息队列等众多高性能组件。

websocket介绍

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

WS协议和WSS协议两个均是WebSocket协议的SCHEM,两者一个是非安全的,一个是安全的。

利用nginx代理SSL

前提条件及准备工作:

1、已经安装nginx,版本不低于1.3

2、假设Workerman监听的是8282端口(websocket协议)

3、已经申请了证书(pem/crt文件及key文件)放在了/etc/nginx/conf.d/ssl下

4、打算利用nginx开启443端口对外提供wss代理服务(端口可以根据需要修改)

5、nginx一般作为网站服务器运行着其它服务,为了不影响原来的站点使用,这里使用地址 域名/wss 作为wss的代理入口。也就是客户端连接地址为 wss://域名/wss

nginx配置类似如下:

location /wss
    {
            proxy_pass http://127.0.0.1:55579;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            rewrite /wss/(.*) /$1 break;
            proxy_redirect off;
    }

workerman代码wss实例

config/process.php

// websocket
    'websocket'      => [
        'handler' => process\Websocket::class,
        'listen'  => 'websocket://127.0.0.1:55579',
        'count'   => cpu_count() * 3,
    ],

process/Websocket.php

<?php
/**
 * This file is part of webman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author    walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link      http://www.workerman.net/
 * @license   http://www.opensource.org/licenses/mit-license.php MIT License
 */

namespace process;

use Workerman\Connection\TcpConnection;

class Websocket
{
    /**
     * 当连接建立时触发的回调函数
     */
    public function onConnect(TcpConnection $connection)
    {
    }

    public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
    {
        if (empty($_SERVER)) $connection->close();
        $HTTP_ORIGIN = $_SERVER['HTTP_ORIGIN'] ?? '';
        if ($HTTP_ORIGIN) {
            if ($HTTP_ORIGIN != WEB_URL) $connection->close();
        }
    }

    /**
     * 收到信息
     */
    public function onMessage(TcpConnection $connection, $data)
    {
        $connection->send(json_encode($data) . 'owen');
    }

    /**
     * 当连接断开时触发的回调函数
     */
    public function onClose(TcpConnection $connection)
    {
        $connection->close();
    }

    /**
     * 当客户端的连接上发生错误时触发
     */
    public function onError(TcpConnection $connection)
    {

    }
}

WebSocket 运行测试

workerman运行

wss地址:wss://pay.owenweb.com/wss

WebSocket 在线测试网址:

http://www.websocket-test.com/

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注作者,阅读全部精彩内容
登录 后参与评论
0 条评论

相关文章

  • 直播可以使用 https 了,快来试试吧

    现在文档中说明不能使用 https,原因是需要配置 wss;下面我们就详细说明一下,认真看哦

    CRMEB商城源码
  • workerman搭建ws和wss环境

    workerman是php写的,github地址:https://github.com/walkor/workerman

    shawyang
  • 记录一次迁移wss WebSocket的事故

      过去的这一个多月里,我的工(开)作(发)任务转战回了游戏。短短的一个月里,催着输出两款h5游戏,再加上对接、联调,想想真是够辛(ku)苦(bi)的。本人负责...

    happyJared
  • 如何在小程序中实现 WebSocket 通信

    在以前的文章中,我们介绍了HTTP通讯,这种通讯有一个缺点,如果我想从直接从服务器发消息给客户端,需要客户端先发起HTTP请求后服务器才能返回数据,且后续服务器...

    Lonely永夜
  • Yii2结合Workerman的websocket示例详解

    本文主要给大家介绍了关于Yii2结合Workerman的websocket的相关内容,两者都是好东西,我就想着能不能结合起来,这样Yii2出现瓶颈的时候有些业务...

    子润先生
  • Yii2结合Workerman的websocket示例详解

    本文主要给大家介绍了关于Yii2结合Workerman的websocket的相关内容,两者都是好东西,我就想着能不能结合起来,这样Yii2出现瓶颈的时候有些业务...

    砸漏
  • workerman的redis queue队列消费实例

    消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。

    OwenZhang
  • workerman的Crontab定时任务实例

    Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务...

    OwenZhang
  • Laravel中Websocket基本使用(Workerman)

    本文介绍workerman实现socket通讯,在此之前请确定你对websocket有所了解

    切图仔
  • windows下WorkerMan实现简单的多人在线聊天

    Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。

    一个淡定的打工菜鸟
  • windows下WorkerMan实现简单的多人在线聊天

    Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。

    一个淡定的打工菜鸟
  • workerman基于Lua脚本Redis限流令牌桶中间件实例

    为防止滥用,你应该考虑对您的 API 限流。 例如,您可以限制每个用户 10 分钟内最多调用 API 100 次。 如果在规定的时间内接收了一个用户大量的请求,...

    OwenZhang
  • ThinkPHP5 集成使用 GatewayWorker 进行即时通信的配置操作

    泥豆芽儿 MT
  • workerman实现redis bit位图实现用户签到PHP实例

    Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务...

    用户8262580
  • php OSS文件读取和写入文件,workerman生成临时文件并输出浏览器下载

    本文介绍php OSS文件读取和写入文件,workerman生成临时文件并输出浏览器下载

    OwenZhang
  • WebSocket协议 与 IO多路复用

    最近在把 Facebook Message 接入客服系统,由于与 Facebook Message 对接的收发消息都是通过调用 http 接口来实现的,如果想实...

    nnngu
  • workerman MongoDB.php实例

    Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务...

    OwenZhang

扫码关注腾讯云开发者

领取腾讯云代金券