基于Python与MySQL的Telegram农场游戏机器人全栈开发实战

news2026/5/9 22:27:45
1. 项目概述一次对经典农场游戏的逆向工程与重生几年前如果你在Telegram上混迹过很可能听说过或者沉迷过一款名为FunFarm的机器人游戏。它是一款典型的放置类农场经营游戏玩家可以播种、等待作物生长、收获、升级农场并与好友竞争。简单、休闲但又带着点“再来一回合”的魔力让它积累了大量的忠实玩家。然而和许多独立项目一样它在2023年因为开发者停止维护而永久关闭了无数玩家的虚拟农场和游戏进度也随之烟消云散。这听起来像是一个悲伤故事的结尾但对于开发者社区来说这恰恰是一个绝佳的学习起点。FunFarm Clone项目正是诞生于此。它不是一个简单的代码拷贝而是一次基于历史数据的、从零开始的逆向工程与逻辑重建。项目的核心“考古资料”是一个名为FunFarm.rar的压缩包里面包含了玩家与原始机器人之间的大量对话记录。通过分析这些对话我们可以像拼图一样一块一块地还原出游戏的核心机制作物生长时间、升级成本、市场交易逻辑等等。这个项目的价值远不止于“复活”一个游戏。它本质上是一个高质量、全栈式的实战教程。通过参与或研究这个项目你可以系统地学习到如何构建一个功能完整的Telegram机器人如何设计游戏状态机如何管理用户数据与持久化存储以及如何处理异步事件比如作物定时成熟。它涵盖了Python后端开发、Telegram Bot API、数据库设计项目使用MySQL、游戏逻辑编程等多个实用技能点。对于想从“写小脚本”迈向“做完整应用”的开发者来说这是一个近乎完美的练手项目。2. 核心架构与设计思路拆解2.1 技术栈选型为什么是Python MySQL Telegram这个项目的技术栈选择非常务实直接瞄准了快速原型开发和社区友好性。后端语言Python选择Python几乎是必然的。首先Telegram Bot的生态在Python中极为成熟有python-telegram-bot这样功能强大、文档完善的库可以极大地简化与Telegram API的交互处理消息、按钮、回调查询等。其次游戏逻辑尤其是放置类游戏的计时、状态更新涉及到大量的异步操作。Python的asyncio库提供了优雅的解决方案可以轻松处理成千上万个用户的“作物计时器”而不阻塞主线程。最后Python的语法简洁降低了项目参与和代码审查的门槛符合其“教育开源项目”的定位。数据库MySQL虽然对于简单的键值存储SQLite可能更轻量但选择MySQL有几层考虑。一是数据关系复杂一个农场游戏涉及用户表、土地表、种子库存表、作物生长记录表、市场订单表等它们之间存在复杂的一对多、多对多关系例如一个用户拥有多块土地一块土地在不同时间种植不同的作物。关系型数据库在维护这些关系的完整性和执行复杂查询如“查询当前所有已成熟作物”方面具有天然优势。二是可扩展性如果项目未来真的发展出大量活跃用户MySQL在性能调优、主从复制等方面有更成熟的方案。三是学习价值理解和设计一个规范化的数据库 schema是后端开发者的核心技能之一。通信层Telegram Bot APITelegram Bot API提供了丰富的交互形式远超简单的文字指令。FunFarm Clone可以充分利用Inline Keyboard内联键盘来制作游戏主界面比如一个包含“播种”、“浇水”、“收获”、“市场”按钮的菜单。Callback Queries回调查询则用于处理这些按钮点击无需用户发送新消息体验流畅。此外还可以通过sendPhoto发送农场状态的图片概览使用editMessageText动态更新消息内容来显示作物生长进度条这些都能极大提升游戏的沉浸感。注意在实际开发中务必遵守Telegram Bot的规则避免滥用API导致令牌被封禁。例如对用户发来的任何消息都要在合理时间内最好几秒内进行响应即使只是先回复一个“处理中”的提示。2.2 游戏状态与数据模型设计这是整个项目的基石。设计不好的数据模型会让后续的逻辑代码变得极其混乱和难以维护。我们需要从FunFarm.rar的对话记录中抽象出核心实体。核心实体关系设计一个简化的E-R模型可以如下构思用户users存储用户的基础信息。user_id: BIGINT (主键对应Telegram用户ID)username: VARCHARcoins: INT (游戏币余额)experience: INT (经验值)level: INT (玩家等级)created_at: TIMESTAMP种子/作物类型crop_types这是一个静态表定义了游戏中所有可种植的作物。crop_id: INT (主键)name: VARCHAR (如“小麦”、“胡萝卜”)growth_time_seconds: INT (从播种到成熟所需秒数)purchase_price: INT (在商店购买种子的价格)sell_price: INT (成熟后出售作物的价格)experience_reward: INT (收获时获得的经验)土地farm_plots代表玩家农场里的一块块地。plot_id: INT (主键)user_id: BIGINT (外键关联users)plot_index: INT (第几块地用于界面显示)is_unlocked: BOOLEAN (这块地是否已解锁)unlock_cost: INT (解锁所需金币)作物实例plantings这是最核心的动态表记录每一块土地上当前种植的作物。planting_id: INT (主键)plot_id: INT (外键关联farm_plots)crop_id: INT (外键关联crop_types)planted_at: TIMESTAMP (播种时间)status: ENUM(‘growing’, ‘ready’, ‘withered’) (生长状态)last_watered_at: TIMESTAMP (最后浇水时间用于可能存在的“加速”或防枯萎逻辑)用户库存inventories记录玩家拥有的种子和物品数量。user_id: BIGINT (外键)item_id: INT (可关联crop_types或其他物品表)item_type: ENUM(‘seed’, ‘tool’)quantity: INT状态机设计作物的生命周期是一个典型的状态机。我们需要一个后台任务例如使用asyncio的循环任务或Celery等任务队列来定期扫描plantings表。扫描逻辑查询所有status ‘growing’且planted_atgrowth_time_secondsNOW()的记录。状态转移将这些记录的状态更新为’ready’。同时可以发送一个Telegram通知给用户如果用户开启了通知。枯萎逻辑可以设计一个额外的规则比如作物成熟后24小时内未收获状态变为’withered’收益减半或为零。这需要扫描status ‘ready’且planted_atgrowth_time_secondsWITHER_DELAYNOW()的记录。这种设计将“时间推进”与“用户操作”解耦是放置类游戏后台的通用设计模式。3. 核心模块实现与代码解析3.1 Telegram机器人交互层实现我们使用python-telegram-bot库的v20版本基于asyncio。首先初始化机器人并设置命令处理器。import logging from telegram.ext import Application, CommandHandler, CallbackQueryHandler, MessageHandler, filters from telegram import InlineKeyboardButton, InlineKeyboardMarkup # 初始化 application Application.builder().token(“YOUR_BOT_TOKEN”).build() # 注册/start命令处理器 async def start(update, context): user update.effective_user # 检查用户是否存在于数据库若不存在则初始化 user_db await db.get_or_create_user(user.id, user.username) # 发送带有游戏主菜单键盘的欢迎信息 keyboard [ [InlineKeyboardButton(“ 我的农场”, callback_data‘farm’)], [InlineKeyboardButton(“ 商店”, callback_data‘shop’)], [InlineKeyboardButton(“ 排行榜”, callback_data‘leaderboard’)], ] reply_markup InlineKeyboardMarkup(keyboard) await update.message.reply_text( f”欢迎回来{user.first_name}你的农场在等着你呢。\n金币{user_db[‘coins’]}”, reply_markupreply_markup ) # 注册回调查询处理器处理所有按钮点击 async def button_callback(update, context): query update.callback_query await query.answer() # 必须调用以关闭客户端的加载状态 data query.data if data ‘farm’: await show_farm(query, context) elif data ‘shop’: await show_shop(query, context) # … 其他回调处理 # 注册处理器 application.add_handler(CommandHandler(“start”, start)) application.add_handler(CallbackQueryHandler(button_callback)) # 启动机器人 application.run_polling(allowed_updatesUpdate.ALL_TYPES)关键点解析CallbackQueryHandler这是实现流畅交互的核心。当用户点击内联按钮时Telegram会发送一个callback_query到你的服务器而不是一条新消息。你需要用query.answer()快速响应然后根据query.data执行相应操作并用edit_message_text或edit_message_reply_markup更新原消息实现“原地刷新”效果。get_or_create_user这是一个非常重要的模式。在start命令或任何交互开始时首先确保用户在数据库中存在。这避免了因为用户直接发送回调数据比如从别人那里转发来的消息而导致的数据库查询错误。3.2 农场核心逻辑与数据库操作以“播种”和“收获”这两个核心动作为例展示如何将业务逻辑、状态检查和数据库操作结合起来。播种流程用户点击某块土地的“播种”按钮。回调数据包含plot_id例如plant_1表示第1块地。处理器函数需要检查该土地是否属于当前用户且已解锁。检查该土地当前是否空闲plantings表中没有status为growing或ready的记录。弹出种子选择菜单从inventories表中查询用户拥有的种子。用户选择种子后执行播种在plantings表中插入新记录status设为’growing’planted_at设为当前时间。从用户的inventories中减少对应种子的数量。更新农场界面显示该土地已种植并开始一个倒计时或进度条。async def handle_planting(update, context): query update.callback_query user_id query.from_user.id _, plot_idx query.data.split(‘_’) # 假设数据格式为 ‘plant_1’ # 1. 检查土地状态 plot_info await db.get_plot(user_id, int(plot_idx)) if not plot_info or not plot_info[‘is_unlocked’]: await query.answer(“这块地尚未解锁或不存在”, show_alertTrue) return current_planting await db.get_current_planting(plot_info[‘plot_id’]) if current_planting: await query.answer(“这块地已经有作物在生长了”, show_alertTrue) return # 2. 获取用户种子库存并生成选择键盘 seeds await db.get_user_seeds(user_id) if not seeds: await query.answer(“你没有可用的种子先去商店购买吧”, show_alertTrue) return keyboard [] for seed in seeds: keyboard.append([InlineKeyboardButton( f”{seed[‘name’]} (剩余{seed[‘quantity’]})”, callback_dataf”choose_seed_{plot_idx}_{seed[‘crop_id’]}” )]) keyboard.append([InlineKeyboardButton(“取消”, callback_data‘farm’)]) await query.edit_message_text(“请选择要播种的种子”, reply_markupInlineKeyboardMarkup(keyboard))收获流程后台任务已将成熟作物的status更新为’ready’。用户在农场界面看到“可收获”的提示按钮。点击后处理器需要再次检查作物状态是否为’ready’防止重复收获或客户端状态不同步。根据crop_id从crop_types表获取作物的sell_price和experience_reward。更新用户的coins和experience。删除plantings表中的这条记录或标记为已收获。更新界面并检查经验是否足够升级。async def handle_harvest(update, context): query update.callback_query user_id query.from_user.id _, planting_id query.data.split(‘_’) # 假设数据格式为 ‘harvest_123’ # 1. 验证收获权与状态 planting await db.get_planting_by_id(int(planting_id)) if not planting or planting[‘user_id’] ! user_id: await query.answer(“无法收获此作物。”, show_alertTrue) return if planting[‘status’] ! ‘ready’: await query.answer(“作物还未成熟”, show_alertTrue) return # 2. 计算收益 crop_info await db.get_crop_type(planting[‘crop_id’]) coin_reward crop_info[‘sell_price’] exp_reward crop_info[‘experience_reward’] # 3. 数据库事务更新用户资产并删除种植记录 async with db.connection.transaction(): await db.add_coins_and_exp(user_id, coin_reward, exp_reward) await db.delete_planting(planting[‘planting_id’]) # 检查并处理用户升级 new_level await db.check_and_update_level(user_id) # 4. 反馈给用户 message f”收获成功获得 {coin_reward} 金币和 {exp_reward} 点经验。” if new_level: message f”\n 恭喜你升级到了 {new_level} 级” await query.answer(message, show_alertTrue) # 5. 刷新农场界面 await show_farm(query, context, from_callbackTrue)实操心得在处理像“收获”这样的核心资源变动操作时一定要在数据库层面使用事务。上面的伪代码中async with db.connection.transaction():确保了“增加金币”和“删除种植记录”要么同时成功要么同时失败。否则可能出现金币增加了但作物还在导致玩家可以无限刷取的严重BUG。3.3 异步任务与定时器设计放置类游戏的灵魂在于时间。我们需要一个可靠的机制来驱动作物生长、事件刷新等。方案一asyncio循环任务适合中小规模在机器人启动时创建一个后台任务定期比如每10秒或30秒扫描数据库。import asyncio from datetime import datetime, timedelta async def background_growth_task(app): while True: try: # 1. 查找所有已成熟的作物 ready_crops await db.find_ready_crops() for crop in ready_crops: # 2. 更新状态这里可以更精细比如记录成熟时间而不是直接标记 await db.update_crop_status(crop[‘planting_id’], ‘ready’) # 3. 可选发送通知给用户 # await app.bot.send_message(chat_idcrop[‘user_id’], text“你的作物成熟了”) # 4. 查找并处理枯萎的作物 withered_crops await db.find_withered_crops() for crop in withered_crops: await db.update_crop_status(crop[‘planting_id’], ‘withered’) except Exception as e: logging.error(f”Background task error: {e}”) finally: await asyncio.sleep(10) # 每10秒检查一次 # 在应用启动后运行 application.job_queue.run_once(lambda _: asyncio.create_task(background_growth_task(application)), when1)方案二基于时间的状态计算推荐更高效上述方案在用户量大时频繁的数据库扫描会成为负担。更优的方案是在查询时计算状态。在plantings表中我们只记录planted_at播种时间和growth_time_seconds生长时长。当需要显示某块土地的状态时不查询status字段而是通过计算来判断current_time datetime.utcnow() if planted_at timedelta(secondsgrowth_time) current_time: status ‘ready’ elif planted_at timedelta(secondsgrowth_time wither_delay) current_time: status ‘withered’ else: status ‘growing’ # 甚至可以计算剩余时间remaining (planted_at growth_time) - current_time这样后台任务只需要处理一些边缘情况如发送通知或者完全取消将状态判断放在业务逻辑层。这大大减少了数据库的写操作和定时扫描的压力。方案三使用任务队列如Celery适合大型、复杂任务如果游戏逻辑更复杂涉及大量计算或需要精确的延时任务如“X小时后触发一个特殊事件”可以引入Celery Redis/RabbitMQ。你可以为每一次播种创建一个延时任务任务到期时执行“成熟”操作。这提供了最好的可扩展性和精确性但架构复杂度也最高。对于FunFarm Clone这样的项目方案二通常是性价比最高的选择。4. 部署、优化与扩展方向4.1 本地开发与生产部署本地开发环境搭建克隆项目与依赖安装git clone https://github.com/Vektor010/funfarm_clone.git cd funfarm_clone python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows pip install -r requirements.txt # 通常包含 python-telegram-bot, aiomysql, sqlalchemy等数据库初始化安装MySQL创建数据库然后运行项目提供的schema.sql文件来创建数据表。配置复制config.example.py为config.py填入你的Bot Token从BotFather获取和数据库连接信息。运行python bot.py。生产环境部署建议进程管理不要直接运行python bot.py。使用systemd(Linux) 或Supervisor来管理进程实现开机自启、崩溃重启、日志重定向。Supervisor配置示例 (/etc/supervisor/conf.d/funfarm.conf)[program:funfarm_bot] command/path/to/venv/bin/python /path/to/funfarm_clone/bot.py directory/path/to/funfarm_clone userwww-data autostarttrue autorestarttrue stderr_logfile/var/log/funfarm_bot.err.log stdout_logfile/var/log/funfarm_bot.out.log反向代理与Webhookrun_polling在开发时很方便但在生产环境使用Webhook模式更稳定、更高效。这需要你的服务器有一个公网IP和域名并配置Nginx/Apache将请求转发到你的机器人应用。# Webhook 模式设置 async def set_webhook(app): WEBHOOK_URL “https://yourdomain.com/secret_path” await app.bot.set_webhook(urlWEBHOOK_URL) # 在应用启动后调用 set_webhook # 并使用相应的Webhook Handler而不是 run_polling数据库连接池使用aiomysql或asyncpg时务必配置连接池避免频繁建立和断开数据库连接带来的性能开销。4.2 性能优化与安全考量数据库优化索引是关键在plantings表的(user_id, status, planted_at)上建立复合索引可以极大加速“查询用户所有正在生长作物”或后台扫描任务。避免N1查询在显示农场全景时不要为每一块土地单独查询种植状态。应该使用JOIN语句一次查询出用户所有土地及其当前的种植情况。读写分离如果用户量增长可以考虑将状态计算读和收获/播种写操作分离到不同的数据库实例。缓存策略Redis应用引入Redis可以解决多个性能瓶颈。用户状态缓存将用户的农场数据金币、经验、土地状态在Redis中缓存一段时间如30秒减少对MySQL的频繁查询。在用户进行操作时先更新数据库再使缓存失效。排行榜缓存全局排行榜的计算可能涉及复杂的聚合查询可以每小时计算一次并存入Redis所有用户查询时都直接读取缓存。频率限制使用Redis记录用户操作如“浇水”的频率防止恶意刷API。安全加固输入验证与消毒对所有从Telegram回调数据callback_query.data或消息文本中获取的参数进行严格验证。例如确保plot_idx是数字且在合理范围内。防刷机制除了频率限制关键资源产出操作如收获必须在服务器端进行最终状态校验如前面代码所示绝不能信任客户端传来的状态。SQL注入防护务必使用参数化查询或ORM如SQLAlchemy绝对不要用字符串拼接的方式构造SQL语句。Token与配置安全Bot Token和数据库密码等敏感信息必须通过环境变量或配置文件且被.gitignore忽略来管理绝不能硬编码在代码中。4.3 项目扩展与功能设想基础版本实现后这个项目有巨大的扩展空间这也是其作为学习项目的持续价值所在。游戏性扩展天气系统引入随机的天气事件雨天加速生长旱天需要额外浇水风暴可能摧毁作物增加策略性。任务与成就系统设计每日任务“收获10次小麦”和成就“解锁所有土地”提供额外奖励提升用户粘性。社交与交易实现一个真正的玩家间市场用户可以挂单买卖资源。这需要设计订单表、交易锁等更复杂的机制。宠物/助手系统引入可以自动浇水、收获或增加产量的宠物通过消耗游戏内货币或完成活动获得。技术深度扩展引入Docker将Bot、MySQL、Redis等服务容器化编写docker-compose.yml让部署一键完成环境完全一致。实现CI/CD使用GitHub Actions在代码推送时自动运行单元测试、代码风格检查并自动部署到测试/生产服务器。编写单元测试与集成测试为核心的游戏逻辑函数如状态计算、收益计算和数据库操作编写测试保证重构和扩展时的代码质量。前后端分离探索尝试用更轻量的框架如FastAPI重构游戏逻辑API然后开发一个独立的Web前端或React Native移动端Telegram Bot仅作为入口之一。这能让你学习到现代微服务架构的思想。社区与协作作为开源项目可以积极利用GitHub的“Good First Issue”标签为新手贡献者标注一些简单的任务如修复文档错别字、添加一种新的作物配置、优化某个函数的注释等。建立清晰的贡献指南和代码规范能让项目走得更远。通过FunFarm Clone这个项目你实际上是在亲手搭建一个微型的游戏服务器处理并发、状态、经济系统和用户交互。无论最终代码是否完美“复刻”了原版FunFarm这个过程本身所带来的全栈开发经验和对系统设计的理解才是最有价值的收获。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…