前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >workerman的websocket的wss实例

workerman的websocket的wss实例

原创
作者头像
OwenZhang
发布2022-05-30 15:08:11
3.1K7
发布2022-05-30 15:08:11
举报
文章被收录于专栏:Owen's WorldOwen's World

本文环境 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配置类似如下:

代码语言:txt
复制
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

代码语言:txt
复制
// websocket
    'websocket'      => [
        'handler' => process\Websocket::class,
        'listen'  => 'websocket://127.0.0.1:55579',
        'count'   => cpu_count() * 3,
    ],

process/Websocket.php

代码语言:txt
复制
<?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 删除。

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • workerman介绍
  • websocket介绍
  • 利用nginx代理SSL
    • 前提条件及准备工作:
      • nginx配置类似如下:
      • workerman代码wss实例
        • config/process.php
          • process/Websocket.php
          • WebSocket 运行测试
            • workerman运行
              • WebSocket 在线测试网址:
              相关产品与服务
              云数据库 Redis
              腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档