手把手教你自己搭建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()方法,如果没有的话,需要把这个方法写上,参考代码如下:

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

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

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

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

onWorkerStart()方法中这样写:

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

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

public static function onMessage($client_id, $message) {

        // 向所有人发送 
        Gateway::sendToAll("$client_id 发来消息: $message");

        //向当前用户发送
        Gateway::sendToClient($client_id, "服务端单独给的消息 $client_id");

        global $redis;

        $level = $redis -> get('level');

        echo $level;
}

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

centos系统

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

yum install libevent-devel -y
# 如果无法安装,尝试使用下面的命令
# 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包,命令行运行

apt-get install libevent-dev -y
# 如果无法安装,请尝试以下命令
# 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

参与评论 您还未登录,请先 登录 后发表或查看评论
相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

salestina

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值