• 手把手教你自己搭建getwayWorker聊天服务器


    一:getwayWorker是什么?【仔细理解】

    GatewayWorker基于Workerman开发的一个项目框架,用于快速开发TCP长连接应用,例如app推送服务端、即时IM服务端、游戏服务端、物联网、智能家居等等

    GatewayWorker使用经典的Gateway和Worker进程模型。Gateway进程负责维持客户端连接,并转发客户端的数据给BusinessWorker进程处理,BusinessWorker进程负责处理实际的业务逻辑(默认调用Events.php处理业务),并将结果推送给对应的客户端。Gateway服务和BusinessWorker服务可以分开部署在不同的服务器上,实现分布式集群。

    GatewayWorker提供非常方便的API,可以全局广播数据、可以向某个群体广播数据、也可以向某个特定客户端推送数据。配合Workerman的定时器,也可以定时推送数据。

    二:getwayWorker与Workerman的关系【仔细理解】

    Workerman是一个纯粹的socket类库,使用Workerman可以开发所有的网络应用,Tcp也好,Udp也罢,即可以开发短连接的接口服务,也可以开发长连接的socket聊天服务器。

    如果你只专注于开发长连接的聊天服务器,那么,getwayWorker就是最好的选择。GatewayWorker是基于Workerman开发的一个TCP长连接框架,实现了单发、群送、广播等长连接必用的接口。GatewayWorker框架实现了Gateway Worker进程模型,天然支持分布式多服务器部署,扩容缩容非常方便,能够应对海量并发连接。可以说GatewayWorker是基于Workerman实现的一个更完善的专门用于实现TCP长连接的项目框架。

    Linux系统下操作步骤:

    1:点击链接下载GatewayWorker:https://www.workerman.net/download/GatewayWorker.zip

    2:将压缩包上传至linux服务器,运行命令行 unzip GatewayWorker.zip 将压缩包解压。

    3:开放linux服务器端口,比如开放8083

    4:修改服务器文件/Applications/YourApp/start_gateway.php中的new Gateway时的端口号,如果使用websocket协议的话,也需要将协议改为websocket。

    5:打开终端,切换到项目目录下,运行命令php start.php start启动服务。

    如果终端显示

     

     

     这时,打开服务器上的php.ini 找到disable_functions,把上面的方法名删除后,重启php即可。

    以宝塔面板为例:

    成功启动后的画面:

    6:打开websocket在线测试地址,将websocket地址:端口 填写到连接输入框内,注意,端口要是自己需要访问的端口,此处的8083只是举例。

    点击连接按钮。

    如果连接成功的话,对话框会显示下面的信息

     

     输入框中输入信息,点击发送,会话框就会显示发送的信息了。

     后续的服务端功能开发,主要是在/Applications/YourApp/Events.php中。

    详细的说明还是要参考官方文档:gateway-worker 手册

    作者写的非常详细,多看多想,会理解的更深刻、

    如果程序需要使用redis的话,可以参考下面的说明:

    1:服务器需要安装php redis扩展。

    首先使用php -m确认是否已经安装了php redis扩展。

    如果没有安装的话,可以参考下面的这个文档来安装。

    安装php redis扩展icon-default.png?t=M4ADhttps://www.jb51.net/article/232165.htm

    2:在/Applications/YourApp/Events.php中看看有没有onWorkerStart()方法,如果没有的话,需要把这个方法写上,参考代码如下:

    1. public static function onWorkerStart($businessWorker){
    2. //echo "WorkerStart\n";
    3. }

    3:如果是连接本服务器redis服务的话,直接在onWorkerStart()方法中写redis的连接方法:

    1. global $redis;
    2. $redis = new redis();
    3. $redis -> connect('127.0.0.1',6379); //注意确认端口是否正确
    4. //$redis ->auth('改为自己的密码'); 如果redis设置了密码,将此代码注释放开并改为正确的redis密码

    如果是连接其他服务器的redis服务的话,首先要确保其他redis服务器的端口开启远程访问,并且允许这个ip访问【查看redis.conf文件的bind是否限制了127.0.0.1,改为本gatewayWorker服务器的ip地址并重启redis服务】

    onWorkerStart()方法中这样写:

    1. global $redis;
    2. $redis = new redis();
    3. $redis -> connect('redis服务器ip地址',6379); //根据自己需求更改IP地址和端口号
    4. $redis ->auth('redis密码'); //根据自己需要更改密码,如果不需要密码,可注释该行

    如果在其他方法中使用redis的话,需要这样写:

    1. public static function onMessage($client_id, $message) {
    2. // 向所有人发送
    3. Gateway::sendToAll("$client_id 发来消息: $message");
    4. //向当前用户发送
    5. Gateway::sendToClient($client_id, "服务端单独给的消息 $client_id");
    6. global $redis;
    7. $level = $redis -> get('level');
    8. echo $level;
    9. }

    如果同时在线人数超过1000人的话,getwayWorker服务器需要优化linux内核,同时需要安装event扩展。

    centos系统

    1、安装event扩展依赖的libevent-devel包,命令行运行

    1. yum install libevent-devel -y
    2. # 如果无法安装,尝试使用下面的命令
    3. # yum install libevent2-devel -y

    2、安装event扩展,命令行运行
    (event扩展要求PHP>=5.4)

    pecl install event

    注意提示:Include libevent OpenSSL support [yes] : 时输入no回车,注意提示:PHP Namespace for all Event classes :时输入yes,其它直接敲回车就行

    3、运行php --ini找到并打开php.ini文件,在最后一行加入如下配置

    extension=event.so

    debian/ubuntu系统安装

    1、安装event扩展依赖的libevent-dev包,命令行运行

    1. apt-get install libevent-dev -y
    2. # 如果无法安装,请尝试以下命令
    3. # apt-get install libevent2-dev -y

    2、安装event扩展,命令行运行

    pecl install event

    注意提示:Include libevent OpenSSL support [yes] : 时输入no回车,注意提示:PHP Namespace for all Event classes :时输入yes,其它直接敲回车就行

    3、运行php --ini找到并打开php.ini文件,在最后一行加入如下配置

    extension=event.so

    Linux内核优化请参考下面链接:

    https://www.workerman.net/doc/workerman/appendices/kernel-optimization.html

  • 相关阅读:
    斯坦福大学吴恩达教授最新来信:AI, GPU和芯片的未来
    STM8的C语言编程(8)--+UART应用
    STM32 中断NVIC详解,配置及示例
    创造财富的9种模式
    【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-职业院校组 | 精品题解
    .Net6 Api Swagger配置
    Layui之用户(CURD)
    沉浸式推理乐趣:体验线上剧本杀小程序的魅力
    spring源码 - AOP原理理解
    【uniapp】解决h5在ios safari浏览器tabBar抖动问题
  • 原文地址:https://blog.csdn.net/salestina/article/details/124883288