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

workerman的websocket的wss实例

原创
作者头像
OwenZhang
发布于 2022-05-30 07:08:11
发布于 2022-05-30 07:08:11
3.7K0
举报
文章被收录于专栏: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
AI代码解释
复制
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
AI代码解释
复制
// websocket
    'websocket'      => [
        'handler' => process\Websocket::class,
        'listen'  => 'websocket://127.0.0.1:55579',
        'count'   => cpu_count() * 3,
    ],

process/Websocket.php

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
workerman MongoDB.php实例
Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。
OwenZhang
2022/05/30
3450
workerman MongoDB.php实例
workerman开发脚手架webman-owen
请使用 php start.php (restart | start | stop) 命令进行控制 守护模式 -d
OwenZhang
2022/10/26
6020
workerman开发脚手架webman-owen
【详解】Nginx配置WebSocket
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
大盘鸡拌面
2025/03/29
1140
windows下WorkerMan实现简单的多人在线聊天
Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。
一个淡定的打工菜鸟
2018/12/27
1K0
WebSocket使用Nginx反向代理解决Wss服务问题
WebSocket 可以减小客户端与服务器端建立连接的次数,减小系统资源开销,只需要一次 HTTP 握手,整个通讯过程是建立在一次连接/状态中,也就避免了 HTTP 的非状态性,服务端会一直与客户端保持连接,直到你关闭请求,同时由原本的客户端主动询问,转换为服务器有信息的时候推送
沈唁
2019/12/12
18.7K0
开源高性能PHP应用容器workerman一对一聊天多人聊天
Workerman 是一款纯 PHP 开发的开源高性能 PHP 应用容器,它突破了传统 PHP 应用的限制,能够开发高性能的实时网络应用。它不是传统的 MVC 框架,而是一个底层通用的服务框架,支持 TCP、UDP、HTTP、WebSocket 等多种协议,适用于开发即时通讯、物联网、游戏服务器、高性能 HTTP 服务等多种应用。
Tinywan
2025/02/27
990
开源高性能PHP应用容器workerman一对一聊天多人聊天
workerman实现redis bit位图实现用户签到PHP实例
Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。
用户8262580
2022/06/08
5780
workerman实现redis bit位图实现用户签到PHP实例
workerman实现redis bit位图实现用户签到PHP实例
Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。
OwenZhang
2022/05/30
6790
workerman实现redis bit位图实现用户签到PHP实例
「IM系列」WebSocket教程:安全授权认证详解和简单实现思路
近年,不论是正在快速增长的直播,远程教育以及IM聊天场景,还是在常规企业级系统中用到的系统提醒,对websocket的需求越来越大,对websocket的要求也越来越高。从早期对websocket的应用仅限于少部分功能和IM等特殊场景,逐步发展为追求支持高并发,百万、千万级每秒通讯的高可用websocket服务。
Tinywan
2023/12/05
1.7K0
「IM系列」WebSocket教程:安全授权认证详解和简单实现思路
升级HTTPS后WebSocket不能连接
如果网站WEB使用HTTPS协议,那相应的WebSocket必须要使用wss协议
adu
2022/10/30
2.5K0
workerman的redis queue队列消费实例
消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。
OwenZhang
2022/05/30
1.2K0
workerman的redis queue队列消费实例
记录一次迁移wss WebSocket的事故
  过去的这一个多月里,我的工(开)作(发)任务转战回了游戏。短短的一个月里,催着输出两款h5游戏,再加上对接、联调,想想真是够辛(ku)苦(bi)的。本人负责后端,也就是服务端这块的游戏主流程输出。去年下半年,在前任大佬的带领下,做过一两款棋牌类的手游,虽然目前的运营状况不太乐观。不过好在,过去学的那点皮毛也还没丢光,所以这次写h5后端总体还算顺畅。至于怎么用Java来写游戏,下来如果有时间会整理下这块的思路和知识。
happyJared
2018/09/20
4.4K0
记录一次迁移wss WebSocket的事故
视频教程 | Workerman基础教程-Worker类的使用
Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。
Tinywan
2024/02/21
1890
视频教程 | Workerman基础教程-Worker类的使用
Nginx Websocket 配置
WebSocket 是一种基于 TCP 连接的全双工通信的协议,其工作在应用层,建立连接的时候通过复用 Http 握手通道,完成 Http 协议的切换升级,即切换到 WebSocket 协议,协议切换成功后,将不再需要客户端发起请求,服务端就可以直接主动向客户端发送数据,实现双向通信。
Se7en258
2021/05/18
5.4K0
Nginx Websocket 配置
workerman开发脚手架webman-owen
请使用 php start.php (restart | start | stop) 命令进行控制 守护模式 -d
OwenZhang
2022/11/07
3860
workerman开发脚手架webman-owen
Yii2结合Workerman的websocket示例详解
本文主要给大家介绍了关于Yii2结合Workerman的websocket的相关内容,两者都是好东西,我就想着能不能结合起来,这样Yii2出现瓶颈的时候有些业务就可以平滑地迁移到Workerman中。下面话不多说了,来随着小编来一起看看详细的介绍吧
子润先生
2021/07/13
9480
nginx代理Websocket
有需求使用nginx反向代理websockt,因为webSocket协议是基于http协议的,因此可以使用nginx反向代理webSocket.
古人诗
2020/03/18
1.5K0
「IM系列」WebSocket教程:WS和WSS域名访问配置
WebSocket协议与HTTP协议不同,但WebSocket握手与HTTP兼容,使用HTTP升级工具将连接从HTTP升级到WebSocket。这允许WebSocket应用程序更容易地适应现有的基础设施。例如,WebSocket应用程序可以使用标准HTTP端口80和443,从而允许使用现有的防火墙规则。
Tinywan
2023/12/19
8.2K0
「IM系列」WebSocket教程:WS和WSS域名访问配置
WebSocket新手入门指南
WebSocket 是 HTML5 新增的在单个 TCP 连接上进行全双工通讯(不受限的双向通信)的协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
蛮三刀酱
2022/01/05
1.7K0
一文带你搞懂Nginx如何配置Http、Https、WS、WSS!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2021/03/09
13K1
推荐阅读
相关推荐
workerman MongoDB.php实例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文