Pomelo知识框架
一、Pomelo 基础概念
-
Pomelo 简介
-
定位:分布式游戏服务器框架(网易开源)。
-
特点:高并发、可扩展、多进程架构、支持多种通信协议(WebSocket、TCP等)。
-
适用场景:MMO RPG、实时对战、社交游戏等。
-
-
核心设计思想
-
多进程架构:Master(管理进程) + Worker(业务进程) + Client(前端)。
-
分布式服务:通过轻量级 RPC 实现进程间通信。
-
插件化设计:可扩展的组件(如日志、监控、路由)。
-
-
核心组件
-
Application:Pomelo 应用实例。
-
Server:服务节点(如
chat-server-1
)。 -
Channel:消息广播的通道。
-
Session:客户端会话管理。
-
二、环境搭建与项目初始化
-
开发环境准备
-
安装 Node.js(建议 LTS 版本)。
-
全局安装 Pomelo:
npm install pomelo -g
。 -
可选工具:PM2(进程管理)、Redis(数据缓存)。
-
-
创建第一个项目
-
初始化项目:
pomelo init ./project_name
。 -
目录结构:
/game-server // 服务器代码 /web-server // 前端/HTTP 服务 /shared // 前后端共享代码
-
-
启动与调试
-
启动服务器:
pomelo start
(开发模式加--env=development
)。 -
日志查看:
pomelo log
。
-
三、核心机制与 API
-
服务器类型与角色
-
Frontend Server:直接与客户端通信(如
connector
)。 -
Backend Server:处理业务逻辑(如
chat
、area
)。 -
配置
servers.json
定义服务器集群。
-
-
路由(Routing)
-
客户端请求路由:通过
app.route()
分配请求到指定服务。 -
服务器间 RPC 路由:
servers.json
中的配置。
-
-
通信协议
-
内置支持 WebSocket、Socket.io、原生 TCP。
-
自定义协议:通过
pomelo-protobuf
或pomelo-json
编解码。
-
-
Channel 与广播
-
创建 Channel:
channelService.createChannel()
。 -
广播消息:
channel.pushMessage()
。
-
四、分布式架构进阶
-
RPC 机制
-
服务端暴露 RPC 方法:
app.rpc.[serverType].remote.[method]
。 -
客户端调用:
app.rpc.[serverType].remote.[method].call(ctx, ...)
。
-
-
负载均衡
-
默认路由策略(如轮询)。
-
自定义路由:修改
app.route()
逻辑。
-
-
Master 高可用
-
Master 节点监控 Worker 状态。
-
故障恢复机制。
-
五、数据与存储
-
Session 管理
-
客户端 Session:
sessionService.bind()
。 -
数据共享:通过
session.set()
/session.get()
。
-
-
数据库集成
-
常用数据库:MongoDB、MySQL、Redis。
-
使用
pomelo-mongo
或pomelo-mysql
插件。
-
-
缓存策略
-
Redis 缓存玩家数据。
-
数据同步问题处理(如脏标记)。
-
六、性能优化与调试
-
压力测试
-
使用
pomelo-cli
或artillery
模拟并发。 -
监控指标:QPS、延迟、内存占用。
-
-
性能调优
-
减少 RPC 调用次数。
-
使用 Channel 过滤减少广播流量。
-
进程拆分(如分离网关和逻辑进程)。
-
-
日志与监控
-
内置日志系统(log4js)。
-
集成第三方监控(如 ELK、Grafana)。
-
七、安全与部署
-
安全实践
-
通信加密(SSL/TLS)。
-
防 DDoS:限流、黑白名单。
-
数据校验(防止协议篡改)。
-
-
生产部署
-
使用 PM2 管理进程。
-
配置文件分离(
config/production
)。 -
负载均衡(Nginx + 多机器部署)。
-
-
运维工具
-
pomelo-admin
:管理控制台。 -
pomelo-cli
:命令行监控。
-
八、实战项目与扩展
-
经典案例
-
聊天室(官方 Demo)。
-
实时对战游戏(如棋牌、ARPG)。
-
-
插件开发
-
自定义插件:继承
pomelo.Plugin
。 -
扩展协议、路由、过滤器。
-
-
社区资源
-
官方 GitHub 仓库及 Wiki。
-
社区插件(如
pomelo-sync
数据同步)。
-
学习路线建议
-
初级阶段
-
掌握基础 API(Server/Channel/Session)。
-
完成官方 Demo(如
chatofpomelo
)。
-
-
中级阶段
-
深入 RPC 和分布式设计。
-
集成数据库和缓存。
-
-
高级阶段
-
性能调优与安全加固。
-
开发自定义插件。
-
通过这个框架,你可以逐步从 Pomelo 的基础使用过渡到分布式系统设计的深层理解。建议配合官方文档和实战项目练习!
相关文章:
Pomelo知识框架
一、Pomelo 基础概念 Pomelo 简介 定位:分布式游戏服务器框架(网易开源)。 特点:高并发、可扩展、多进程架构、支持多种通信协议(WebSocket、TCP等)。 适用场景:MMO RPG、实时对战、社交游戏等…...
歌词滚动效果
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 设置标签页图标 --><link rel"shortcut icon&…...
python如何合并excel单元格
在Python中合并Excel单元格,常用openpyxl库实现。以下是详细步骤和示例代码: 方法一:使用 openpyxl 库 步骤说明: 安装库: pip install openpyxl导入库并加载文件: from openpyxl import load_workbook# …...
嵌入式学习笔记 D20 :单向链表的基本操作
单向链表的创建单向链表的插入单向链表的删除及清空单向链表的修改单向链表的查找单向链表的逆序 一、单向链表的创建 LinkList *CreateLinkList() {LinkList *ll malloc(sizeof(LinkList));if (NULL ll) {fprintf(stderr, "CreateLink malloc");return NULL;}ll…...
瀑布模型VS敏捷模型VS喷泉模型
目录 1. 瀑布模型(Waterfall Model) 2. 敏捷模型(Agile Model) 3. 喷泉模型(Fountain Model)...
Android usb网络共享详解
Android usb网络共享详解 文章目录 Android usb网络共享详解一、前言二、USB网络共享使用的前提1、Android设备支持adb 并且打开usb开关2、原生Settings能看到USB网络共享开关3、代码中检测USB网络共享是否支持 三、Settings 中USB网络共享代码的部分代码1、Settings\res\xml\t…...
在线黑白图像转换:简单却强大的视觉表达工具
为什么选择黑白图像? 在这个色彩缤纷的数字世界中,黑白摄影却始终保持着其独特的魅力。黑白图像消除了色彩的干扰,让我们更专注于构图、纹理和形式的表达。这种经典的转换技术能够创造出富有情感和强烈对比的视觉作品,呈现出彩色…...
python 异步执行测试
1. 并行执行机制 子进程级并行:通过 asyncio.create_subprocess_exec 启动的每个外部命令(如 python run_spider.py)会创建一个独立的系统进程,由操作系统直接调度,实现真正的并行执行。 协程级并发:主程序…...
《Python星球日记》 第69天:生成式模型(GPT 系列)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、GPT简介:从架构到原理1. GPT的架构与工作原理2. Decoder-only结…...
STM32 之网口资源
1 网口资源介绍 STM32F407 是 STMicroelectronics 推出的高性能 ARM Cortex-M4 微控制器,具备多种外设接口,其中包括一个 Ethernet MAC 控制器(带 IEEE 1588 支持)。这意味着你可以使用 STM32F407 实现网络通信功能(通…...
一分钟在Cherry Studio和VSCode集成火山引擎veimagex-mcp
MCP的出现打通了AI模型和外部数据库、网页API等资源,成倍提升工作效率。近期火山引擎团队推出了 MCP Server SDK: veimagex-mcp。本文介绍如何在Cherry Studio 和VSCode平台集成 veimagex-mcp。 什么是MCP MCP(Model Context Protocol&…...
业务中台-典型技术栈选型(微服务、容器编排、分布式数据库、消息队列、服务监控、低代码等)
在企业数字化中台建设中,业务中台是核心支撑平台,旨在通过技术手段将企业核心业务能力抽象、标准化和复用,以快速响应前端业务需求。其核心技术流涉及从业务抽象到服务化、治理和持续优化的全流程。以下是业务中台建设中的核心技术体系及关键…...
图像颜色理论与数据挖掘应用的全景解析
文章目录 一、图像颜色系统的理论基础1.1 图像数字化的本质逻辑1.2 颜色空间的数学框架1.3 量化过程的技术原理 二、主要颜色空间的深度解析2.1 RGB颜色空间的加法原理2.2 HSV颜色空间的感知模型2.3 CMYK颜色空间的减色原理 三、图像几何属性与高级特征3.1 分辨率与像素密度的关…...
从规则驱动到深度学习:自然语言生成的进化之路
自然语言生成技术正经历着人类文明史上最剧烈的认知革命。这项起源于图灵测试的技术,已经从简单的符号操作演变为具备语义理解能力的智能系统。当我们回溯其发展历程,看到的不仅是算法模型的迭代更新,更是一部人类认知自我突破的史诗。这场革…...
影刀RPA网页自动化总结
1. 影刀RPA网页自动化概述 1.1 定义与核心功能 影刀RPA网页自动化是一种通过软件机器人模拟人类操作网页行为的技术,旨在提高网页操作效率、减少人工干预。其核心功能包括: 网页数据抓取:能够高效抓取网页上的数据,如电商数据、…...
[:, :, 1]和[:, :, 0] 的区别; `prompt_vector` 和 `embedding_matrix`的作用
prompt_vector = torch.sum(prompt_embedding * attention_weights.unsqueeze(-1), dim=1) # [1, hidden_dim] prompt_vector = torch.sum(prompt_embedding * attention_weights.unsqueeze(-1), dim=1) 主要作用是通过将 prompt_embedding 与 attention_weights 相乘后再按指…...
LeetCode 题解 41. 缺失的第一个正数
41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释:范围 [1,…...
3337. 字符串转换后的长度 II
3337. 字符串转换后的长度 II # 定义了一个大质数 MOD,用于取模运算,防止数值溢出。 MOD 1_000_000_007# 矩阵乘法 mul def mul(a:List[List[int]], b:List[List[int]]) -> List[List[int]]:# 输入两个矩阵 a 和 b,返回它们的矩阵乘积 a…...
基于 TensorFlow 框架的联邦学习可穿戴设备健康数据个性化健康管理平台研究
基于 TensorFlow 框架的联邦学习可穿戴设备健康数据个性化健康管理平台研究 摘要: 随着可穿戴设备的普及,人们对于自身健康管理的需求日益增长。然而,可穿戴设备所收集的健康数据往往分散在不同用户的设备中,且涉及用户隐私敏感信息。本研究旨在构建一个基于 TensorFlow 框…...
查看字节真实二进制形式示例解析1
查看字节的真实二进制形式? 若需要显式查看二进制0/1,可以通过以下方法转换: 方法1:逐字节转换为二进制字符串 def bytes_to_binary(data: bytes) -> str:return .join([bin(byte)[2:].zfill(8) for byte in data])# 示例 …...
hadoop中spark基本介绍
Spark是一个基于内存计算的快速、通用、可扩展的大数据处理引擎,可与Hadoop集成并在其生态系统中发挥重要作用。以下是其基本介绍: 特点 - 快速:基于内存计算,能将中间结果缓存在内存中,避免频繁读写磁盘,大…...
Apollo学习——键盘控制速度
# keyboard_control.py import time import keyboard # 键盘输入模块 pip install keyboard from getkey import getkey, keys from cyber.python.cyber_py3 import cyber_time from cyber.python.cyber_py3 import cyber from modules.common_msgs.control_msgs import contro…...
无人机数据处理与特征提取技术分析!
一、运行逻辑 1. 数据采集与预处理 多传感器融合:集成摄像头、LiDAR、IMU、GPS等传感器,通过硬件时间戳或PPS信号实现数据同步,确保时空一致性。 边缘预处理:在无人机端进行数据压缩(如JPEG、H.265)…...
Java内存马的检测与发现
【网络安全】Java内存马的检测与发现 一、Java内存马的现象二、检测思路三、重点关注类四、检测方法1. 检查方法(FindShell)2. 检查方法(sa-jdi)3. 检查方法(arthas-boot)4. 检查方法(cop.jar&a…...
基于策略的强化学习方法之策略梯度(Policy Gradient)详解
在前文中,我们已经深入探讨了Q-Learning、SARSA、DQN这三种基于值函数的强化学习方法。这些方法通过学习状态值函数或动作值函数来做出决策,从而实现智能体与环境的交互。 策略梯度是一种强化学习算法,它直接对策略进行建模和优化,…...
未来软件开发趋势与挑战
未来软件开发的方向将受到技术进步、市场需求和社会变革的多重影响。以下是可能主导行业发展的关键趋势: 1. AI与自动化深度整合 AI代码生成:GitHub Copilot等工具将进化成"AI开发伙伴",能理解业务逻辑并自动生成完整模块。自修复…...
【vue】生命周期钩子使用
一、详解 created:实例化完成还没有渲染 mounted:渲染完成 二、应用 在created之后获取网络请求,封装成函数,在需要的地方直接调用函数...
【CTFShow】Web入门-信息搜集
Web1 好长时间没刷题了,第一眼看到的时候有点儿手足无措 在信息搜集中最常用的手段就是直接查看源代码,所以直接F12大法吧,果不其然拿到了flag Web2 题目给了提示js前台拦截 无效操作 打开题看到界面还是一脸茫然 坏了,这波貌似…...
Go 语言 net/http 包使用:HTTP 服务器、客户端与中间件
Go 语言标准库中的net/http包十分的优秀,提供了非常完善的 HTTP 客户端与服务端的实现,仅通过几行代码就可以搭建一个非常简单的 HTTP 服务器。几乎所有的 go 语言中的 web 框架,都是对已有的 http 包做的封装与修改,因此…...
YOLO v2:目标检测领域的全面性进化
引言 在YOLO v1取得巨大成功之后,Joseph Redmon等人在2016年提出了YOLO v2(也称为YOLO9000),这是一个在准确率和速度上都取得显著提升的版本。YOLO v2不仅保持了v1的高速特性,还通过一系列创新技术大幅提高了检测精度…...
卓力达红外热成像靶标:革新军事训练与航空检测的关键技术
引言 红外热成像技术凭借其非接触、无辐射、全天候工作的特性,已成为现代军事和航空领域的重要工具。南通卓力达研发的**自发热红外热成像靶标**,通过创新设计与制造工艺,解决了传统训练器材的痛点,并在军事和航空应用中展现出显…...
【生产实践】Dolphinscheduler集群部署后Web控制台不能登录问题解决
太长不看版 问题描述: Dolphinscheduler按生产手册使用一键脚本集群部署后,控制台登录页面可以打开,但使用默认账户怎么都登录不进去,尝试在数据库中清理登录用户字段,发现数据库中并没有相关用户字段,而后…...
Shell和Bash介绍
Shell是硬件和软件之间的交互界面。Bash是一种shell,在Linux系统中比较常见。我目前使用的Mac用的Z shell(zsh). 可以在terminal里面通过zsh命令对系统进行操作。这是与Windows所见所得,用鼠标点相比,Mac和Linux都可以完全用命令操作。常用的…...
数据 分析
应用统计和计算方法,识别数据特征与规律. 1 分析方法 1.1 描述性分析 总结和呈现数据的基本特征;特点是简单直观. 1.1.1 集中趋势分析 ①均值:数据总和除以数据个数,反映数据的平均水平;特点是易受极端值影响;用于了解整体平均情况,例如计算班级学生平均成绩. ②中位数:将数…...
纯css实现蜂窝效果
<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>蜂窝效果</title><style>body {margin: 0…...
用PyTorch在超大规模下训练深度学习模型:并行策略全解析
我猜咱们每个人肯定都累坏了,天天追着 LLM 研究社区跑,感觉每天都冒出个新的最牛模型,把之前的基准都给打破了呢。要是你好奇为啥创新速度能这么快,那主要就是研究人员能够在超大规模下训练和验证模型啦,这全靠并行计算…...
linux-进程信号捕捉
1. 信号捕捉流程 操作系统会在合适的时候处理信号,那这个合适的时候是什么时候呢?进程从内核态返回到用户态的时候。 假如用户程序注册了 SIGQUIT 信号的处理函数 sighandler。当程序正在执行 main 函数时,如果发生中断、异常或系统调用&…...
【免杀】C2免杀技术(三)shellcode加密
前言 shellcode加密是shellcode混淆的一种手段。shellcode混淆手段有多种:加密(编码)、偏移量混淆、UUID混淆、IPv4混淆、MAC混淆等。 随着杀毒软件的不断进化,其检测方式早已超越传统的静态特征分析。现代杀软往往会在受控的虚…...
人工智能驱动的临床路径体系化解决方案与实施路径
引言 临床路径管理作为现代医疗质量管理的重要工具,其核心在于通过标准化诊疗流程来提升医疗服务的规范性、一致性和效率。然而,传统临床路径管理面临路径设计僵化、执行依从性低、变异管理滞后等诸多挑战,亟需借助人工智能技术实现转型升级。本研究旨在探讨如何通过构建系…...
旋变信号数据转换卡 旋变解码模块 汽车永磁同步电机维修工具
旋变信号数据转换卡,是一款专门针对与永磁同步电机的旋变编码器和 BRX 型旋转变压器编码器进行旋变信号解码转换串行总线协议的专用转换卡。此款转换卡结合了专用的旋变信号解码芯片解码逻辑处理,解码信号分辨率高、线性度高、响应速度快。板卡采用工业级…...
RPM 包制作备查 SRPM 包编译
🌈 个人主页:Zfox_ 目录 🔥 前言 一:🔥 准备 二:🔥 制作 rpm 1.设置目录结构(制作车间)2. 源码放置到规划好的目录当中3. 创建一个spec文件,指挥如何使用这些…...
[学习] RTKLib详解:rtcm2.c、rtcm3.c、rtcm3e与rtcmn.c
RTKLib详解:rtcm2.c、rtcm3.c、rtcm3e与rtcmn.c 本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详…...
MCU ESP32-S3+SD NAND(贴片式T卡):智能皮电手环(GSR智能手环)性能与存储的深度评测
在智能皮电手环与数据存储领域,主控MCU ESP32-S3FH4R2 与 存储SD NAND MKDV2GIL-AST 的搭档堪称行业新典范。二者深度融合低功耗、高速读写、SMART 卓越稳定性等核心优势,以高容量、低成本的突出特性,为大规模生产场景带来理想的数据存储方案…...
股指期货套期保值怎么操作?
股指期货套期保值就是企业或投资者通过持有与其现货市场头寸相反的期货合约,来对冲价格风险的一种方式。换句话说,就是你在股票市场上买了股票(现货),担心股价下跌会亏钱,于是就在期货市场上卖出相应的股指…...
Pytorch的Dataloader使用详解
PyTorch 的 DataLoader 是数据加载的核心组件,它能高效地批量加载数据并进行预处理。 Pytorch DataLoader基础概念 DataLoader基础概念 DataLoader是PyTorch基础概念 DataLoader是PyTorch中用于加载数据的工具,它可以:批量加载数据…...
Ros2 - Moveit2 - DeepGrasp(深度抓握)
本教程演示了如何在 MoveIt 任务构造器中使用抓握姿势检测 (GPD)和 Dex-Net 。 GPD(左)和 Dex-Net(右)用于生成拾取圆柱体的抓取姿势。 https://moveit.picknik.ai/main/_images/mtc_gpd_panda.gif 入门 如果您还没有这样做&am…...
【DRAM存储器五十一】LPDDR5介绍--CK、WCK、RDQS单端模式、Thermal Offset、Temperature Sensor
👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《某LPDDR5数据手册》 、《JESD209-5C》 目录 CK、WCK、RDQS单端模式 Thermal Offset Temperature Sensor...
【springcloud学习(dalston.sr1)】Eureka 客户端服务注册(含源代码)(四)
d该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一) 这篇文章主要介绍Eureka客户端服务注册到eureka的server端。 上篇文章【springcloud学习(dalston.sr1)】Eurek…...
数据结构 栈和队列
文章目录 📕1.栈(Stack)✏️1.1 栈的基本操作✏️1.2 栈的模拟实现🔖1.2.1 构造方法🔖1.2.2 扩容方法🔖1.2.3 判断栈是否为空或是否满🔖1.2.4 存储元素🔖1.2.5 删除元素🔖1.2. 6 获取栈顶元素 ✏…...
[数据结构]5. 栈-Stack
栈-Stack 1. 介绍2. 栈的实现2.1 基于链表的实现2.2 基于数组的实现 3. 栈操作CreateInitilizateDestoryPushPopTopEmptySize 1. 介绍 栈(stack) 是一种遵循先入后出逻辑的线性数据结构。顶部称为“栈顶”,底部称为“栈底”。把元素添加到栈…...