0 回复
0 回复

大家好啊,世界您好啊

分享chchchen 发表了文章 • 0 个评论 • 9 次浏览 • 1 天前 • 来自相关话题

大家好啊,世界您好啊,,,,,,,,,,,,,,

大家好啊,世界您好啊,,,,,,,,,,,,,,

0 回复

web-sender怎么连接数据,怎么发送curl

回复

提问dalao 发起了问题 • 1 人关注 • 2021-07-19 19:24 • 来自相关话题

0 回复

windows下thinkphp同时运行多个workerman

分享adminppper 发表了文章 • 0 个评论 • 94 次浏览 • 2021-07-17 21:05 • 来自相关话题

start "cmd窗口名称" /b php xxxx /b 不新建窗口打开

start "cmd窗口名称" /b php xxxx


/b 不新建窗口打开
截图

0 回复

redis的客户端是否添加下lpos的支持

回复

建议forgaoqiang 发起了问题 • 1 人关注 • 2021-07-16 02:53 • 来自相关话题

0 回复

建议status文件位置应该可以自定义

回复

建议小七他哥 发起了问题 • 1 人关注 • 2021-06-24 21:51 • 来自相关话题

0 回复

代码统一化处理

回复

建议cxlblm 发起了问题 • 1 人关注 • 2021-06-22 23:28 • 来自相关话题

0 回复

workerman如何发送 ESC键 和control键的转义字符串

回复

提问adminppper 发起了问题 • 1 人关注 • 2021-06-19 11:38 • 来自相关话题

0 回复

物联网在线掉娃娃机场景的设计思路

回复

提问ansendu 发起了问题 • 1 人关注 • 2021-06-17 09:27 • 来自相关话题

0 回复

请教 RedisQueue 超时问题

回复

提问fishzhang 发起了问题 • 3 人关注 • 2021-06-15 11:20 • 来自相关话题

0 回复

workerman底层基于epoll的socket有没有实现边缘触发?

回复

提问ansendu 发起了问题 • 1 人关注 • 2021-06-11 17:16 • 来自相关话题

0 回复

withFile 发送二进制文件问题

回复

提问往事随风 发起了问题 • 1 人关注 • 2021-06-10 18:28 • 来自相关话题

0 回复

symonfy 已经发布官方的 Runtime Component , workerman 什么时候可以官方整合 syfmony ?

回复

提问askuiop 发起了问题 • 1 人关注 • 2021-06-09 11:09 • 来自相关话题

0 回复

望能帮到你:《TCP IP详解卷1:协议 原书第2版》

分享liziyu 发表了文章 • 0 个评论 • 152 次浏览 • 2021-06-07 22:46 • 来自相关话题

希望对workerman开发有帮助,分享给大家! 如果有侵犯到版权之类的,可以联系本人或直接找本社区管理人员删除! 谢谢!! 链接: https://pan.baidu.com/s/1BNjeUIp3JKVPaohujzXt

希望对workerman开发有帮助,分享给大家!


如果有侵犯到版权之类的,可以联系本人或直接找本社区管理人员删除!


谢谢!!


链接: https://pan.baidu.com/s/1BNjeUIp3JKVPaohujzXtEg 密码: c5r3

0 回复

GatewayWorker如何解决掉线问题?

回复

提问jiangle 发起了问题 • 1 人关注 • 2021-06-06 15:58 • 来自相关话题

0 回复

AsyncTcpConnection 链接火币websocket

回复

提问mazhaozi 发起了问题 • 1 人关注 • 2021-06-03 17:12 • 来自相关话题

0 回复

pc端连接不上服务器

回复

提问user 发起了问题 • 1 人关注 • 2021-06-03 03:15 • 来自相关话题

0 回复

请教一个关于断点下载的问题

回复

提问MakeHui 发起了问题 • 1 人关注 • 2021-06-02 11:57 • 来自相关话题

0 回复

在程序中使用restart重启服务抛出大量退出异常

回复

提问刘佳 发起了问题 • 1 人关注 • 2021-06-01 17:36 • 来自相关话题

0 回复

workerman怎么区分接收的值啊

回复

提问暖冬八月 发起了问题 • 1 人关注 • 2021-05-31 09:43 • 来自相关话题

0 回复

webman - 处理任务

回复

提问evilk 发起了问题 • 1 人关注 • 2021-05-30 22:23 • 来自相关话题

0 回复

workerman/http-client 能给每个请求单独设置超时吗?

回复

提问blesswarrior 发起了问题 • 1 人关注 • 2021-05-28 12:01 • 来自相关话题

0 回复

记录一下getAllClientCount和getAllClientSessions为空的情况

回复

分享wanglong126 发起了问题 • 1 人关注 • 2021-05-28 11:17 • 来自相关话题

0 回复

在 k8s 里部署 workerman-chat

分享cloudbeer 发表了文章 • 0 个评论 • 170 次浏览 • 2021-05-25 10:20 • 来自相关话题

0 workerman 介绍 Workerman 是一个 PHP 编写的高性能的 socket 服务器通讯框架,用于快速开发各种网络应用,包括tcp的、udp的、长连接、短连接应用。 但他的官网并未提供 K8S 部署教程。下面咱们来用 ...查看全部

0 workerman 介绍


Workerman 是一个 PHP 编写的高性能的 socket 服务器通讯框架,用于快速开发各种网络应用,包括tcp的、udp的、长连接、短连接应用。


但他的官网并未提供 K8S 部署教程。下面咱们来用 K8S 部署一下 workerman-chat,他的源代码在 https://github.com/walkor/workerman-chat


本教程的包含了他的源代码(仅作为示例代码保存,代码版权属于原作者,正式部署请至 Workerman 官方下载),修改了部分代码,修改处会在下文中说明。


本文的 git 地址在 https://github.com/cloudbeer/workerman-chat-k8s


我们将按照如下的架构部署:
部署架构


docker 镜像均已经上传到 hub.docker.com,本文的脚本可以在腾讯云 TKE 中直接运行。


部署脚本如下:


kubectl apply -f ns.yaml
kubectl apply -f register.yaml
kubectl apply -f gateway.yaml
kubectl apply -f businessworker.yaml

1 编写 Dockerfile & 修改源代码


workerman 运行环境,需要安装 pcntl,代码如下。
这个 docker 包标记为:cloudbeer/workerman-base:1.0


FROM php:7.3

RUN docker-php-ext-configure pcntl --enable-pcntl \
&& docker-php-ext-install pcntl

我们使用分布式部署,所以需要修改 gateway 代码中的注册地址:127.0.0.1,但在容器中分布式部署,我们无法得知pod 的 ip,故改成动态获取 ip 的方式。
register 的 ip 也未知,但在 K8S 中,这个地址可以通过 service 发布出来,我们暂且命名这个服务为 register,gateway 和 businessworker 中注册中心的地址修改为 register 即可。


Applications/Chat/start_gateway.php,修改如下:


//....
// 分布式部署时请设置成内网ip(非127.0.0.1)
// $gateway->lanIp = '127.0.0.1';
$gateway->lanIp = getHostByName(getHostName());

//....

// 服务注册地址
// $gateway->registerAddress = '127.0.0.1:1236';
$gateway->registerAddress = 'register:1236';

//....

Applications/Chat/start_businessworker.php,修改如下:


//....

// 服务注册地址
// $worker->registerAddress = '127.0.0.1:1236';
$worker->registerAddress = 'register:1236';

//....

打包代码(别忘记 composer install 一下先):


FROM cloudbeer/workerman-base:1.0
RUN mkdir /app
COPY ./workerman-chat /app

2 部署 register


apiVersion: apps/v1
kind: Deployment
metadata:
name: workerman-chat-register
namespace: workerman
labels:
app: workerman-chat-register
spec:
replicas: 1
selector:
matchLabels:
app: workerman-chat-register
template:
metadata:
labels:
app: workerman-chat-register
spec:
containers:
- name: register
image: cloudbeer/workerman-code:1.0
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "500m"
ports:
- containerPort: 1236
protocol: TCP
command: [php, /app/Applications/Chat/start_register.php, start]
---
apiVersion: v1
kind: Service
metadata:
name: register
namespace: workerman
spec:
selector:
app: workerman-chat-register
ports:
- protocol: TCP
port: 1236
targetPort: 1236

3 部署 gateway


部署 gateway 的 pod,由于需要对外提供服务,使用了 LoadBalancer 的 service 发布服务。这里也可以创建 ingress 来发布服务。


apiVersion: apps/v1
kind: Deployment
metadata:
name: workerman-chat-gateway
namespace: workerman
labels:
app: workerman-chat-gateway
spec:
replicas: 1
selector:
matchLabels:
app: workerman-chat-gateway
template:
metadata:
labels:
app: workerman-chat-gateway
spec:
containers:
- name: gateway
image: cloudbeer/workerman-code:1.0
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "500m"
ports:
- containerPort: 7272
protocol: TCP
command: [php, /app/Applications/Chat/start_gateway.php, start]
---
apiVersion: v1
kind: Service
metadata:
name: gateway
namespace: workerman
spec:
type: LoadBalancer
selector:
app: workerman-chat-gateway
ports:
- protocol: TCP
port: 7272
targetPort: 7272

4 部署 businessworker


businessworker 在内部工作,只需要部署 pod 即可。


apiVersion: apps/v1
kind: Deployment
metadata:
name: workerman-chat-businessworker
namespace: workerman
labels:
app: workerman-chat-businessworker
spec:
replicas: 1
selector:
matchLabels:
app: workerman-chat-businessworker
template:
metadata:
labels:
app: workerman-chat-businessworker
spec:
containers:
- name: businessworker
image: cloudbeer/workerman-code:1.0
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "500m"
command: [php, /app/Applications/Chat/start_businessworker.php, start]

测试服务


workerman-chat 提供了一个 聊天室的 web 测试端。


下面我们在本地启动这个聊天室:
先修改 websocket 的目标地址,为 gateway 的 Loadbalancer 的地址(假设为 1.2.3.4),修改 Applications/Chat/Web/index.php 文件如下:



// ws = new WebSocket("ws://"+document.domain+":7272");
ws = new WebSocket("ws://1.2.3.4:7272");

本地启动:


php ./Applications/Chat/start_web.php start

打开浏览器:http://localhost:55151


多开几个聊天室,完美运行。


扩充实例


按照 workerman-chat 的文档,gateway 和 businessworker 可以扩展。register 为单实例,不能扩。


现在可以试着扩冲 businessworker 的数量:


kubectl scale --replicas=3 -f businessworker.yaml

或者直接修改 yaml 的 replicas 的数量。


扩展成功后,多开几个聊天室,就会发现 businessworker 的 pod 的日志开始接收聊天信息了。
测试的时候需要注意:只有新用户加入的时候,新扩展的 businessworker 才提供服务。


同理可扩充 gateway,gateway 的服务由 LoadBalancer 负载,经测试,聊天正常。


正式运行环境也可以使用 HPA 自动伸缩。

0 回复

控制台输出中文部分乱码,如何解决

回复

提问小糊涂神 发起了问题 • 1 人关注 • 2021-05-21 21:46 • 来自相关话题

0 回复

model模型获取表字段类型

回复

提问cai584887013 发起了问题 • 1 人关注 • 2021-05-21 14:15 • 来自相关话题

0 回复

webman如何实现一个user组件

回复

提问wo664881680 发起了问题 • 1 人关注 • 2021-05-18 13:59 • 来自相关话题

0 回复

macos11.2 无法编译pcntl.so

回复

提问adminppper 发起了问题 • 1 人关注 • 2021-05-17 17:06 • 来自相关话题

0 回复

ajax带header请求跨域问题 跑【webman】

回复

案例good5tea 发起了问题 • 1 人关注 • 2021-05-08 17:37 • 来自相关话题

0 回复

能不能把子进程放到GPU中执行?大大提升速度

回复

提问dignfei 发起了问题 • 1 人关注 • 2021-05-08 12:35 • 来自相关话题

0 回复

workerman mysql 如何使用子查询

回复

提问gouwenyu 发起了问题 • 1 人关注 • 2021-05-05 19:36 • 来自相关话题

0 回复

workerman error.

回复

提问Bheemcoin 发起了问题 • 1 人关注 • 2021-04-30 10:10 • 来自相关话题

0 回复

laravel8 生成命令行 守候模式开启不了

回复

提问周浩 发起了问题 • 1 人关注 • 2021-04-21 21:16 • 来自相关话题

0 回复

学习视频!

回复

提问chenzifan 发起了问题 • 0 人关注 • 2021-04-21 15:12 • 来自相关话题

0 回复

workman启动有两个找不到的文件自动加载,有一个自动加载判断逻辑有问题

回复

提问honghuabin 发起了问题 • 1 人关注 • 2021-04-16 15:59 • 来自相关话题

0 回复

我服务端点击结束对话 然后要触发onclose 就可以关闭吗 在通知客户端关闭了

回复

提问未来222 发起了问题 • 1 人关注 • 2021-04-14 23:56 • 来自相关话题

0 回复

http-client 请求报错

回复

提问wangxingyu 发起了问题 • 2 人关注 • 2021-04-03 02:56 • 来自相关话题

0 回复

windows环境下,用Timer 不执行[已解决】

回复

提问simple 发起了问题 • 1 人关注 • 2021-03-29 16:39 • 来自相关话题

0 回复

有没有用 webman 开发的开源系统,我想学习一下

回复

提问isgbuddy 发起了问题 • 2 人关注 • 2021-03-29 10:14 • 来自相关话题

0 回复

workerman/http-client 如何友好的拿到 错误码和错误信息

回复

提问huangzj 发起了问题 • 0 人关注 • 2021-03-12 18:25 • 来自相关话题