一、技术选型(从零开始撸斗地主)

将心沉下来,构建一个自己属于自己的城堡。

最近准备搞一个能承载上万人同时在线的斗地主游戏。

技术选型

客户端:Unity3D

目前有俩个选项,unity3d,cocosCreator
思考了很久,最终决定选用自己擅长的框架来搞。

服务器:go+Leaf+Redis+Mysql

Go、语言性能堪比c系列,但是语法又是高级语言,契合时代的发展

Leaf、市面上还算比较成熟的通讯框架,其功能比较单调且底层。
评估一个框架的好坏,在能够实现功能的基础上,构造越简单越好。

AK47,为何能风靡半个世纪,深受士兵们的喜爱,就是构造简单且耐操、不容易卡壳!

Redis、做为数据缓存,与mysql结合使用,减轻mysql的读写压力
同时还能利用其队列功能,做框架的通讯层

Mysql、数据落地,每局游戏结束,或者在指定的时间内,将Redis的数据存储到mysql中。

通讯:TCP+ProtoBuffer

对局游戏必须实时通讯,所以http不能用,WebSocket在通讯的时候,会做些额外的动作、每次通讯都会带一些冗余信息,加大带宽流量。比较费钱,所以最终选择TCP,省钱!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装docker可视化工具:Portainer

文章目录 前言一、安装Portainer(docker可视化工具)1.拉镜像2. 启动容器3.查看4.访问 总结 前言 一、安装Portainer(docker可视化工具) 1.拉镜像 docker pull portainer/portainer2. 启动容器 docker run -d -p 8100:8000 -p 9…

全功能测试框架 - Carina

Carina是一个基于Java的测试自动化框架,它将所有测试层结合在一起:移动应用程序(web、本机、混合)、web应用程序、REST服务和数据库。 github:GitHub - zebrunner/carina: Carina automation framework (TestNG): Web…

循环链表(单循环、双循环)(数据结构与算法)

循环链表:循环单链表、循环双链表 1. 循环单链表 循环单链表(Circular Singly Linked List)是一种特殊类型的单链表,其中最后一个节点的指针指向头节点,形成一个循环。 循环单链表与普通单链表的主要区别在于&#xf…

我用 ChatGPT 的探索与实践

本文主要介绍在实际的开发过程当中,如何使用GPT帮助开发,优化流程;本文所有代码和脚本均是利用GPT生成。 技术交流群 建了技术答疑、交流群!想要进交流群、资料的同学,可以直接加微信号:mlc2060。加的时候…

Leetcode-509 斐波那契数列

使用循环 class Solution {public int fib(int n) {if(n 0){return 0;}if(n 1){return 1;}int res 0;int pre1 1;int pre2 0;for(int i 2; i < n; i){res pre1 pre2;pre2 pre1;pre1 res;}return res;} }使用HashMap class Solution {private Map<Integer,Int…

项目实战:展示第一页数据

1、在FruitDao接口中添加查询第一页数据和查询总记录条数 package com.csdn.fruit.dao; import com.csdn.fruit.pojo.Fruit; import java.util.List; //dao &#xff1a;Data Access Object 数据访问对象 //接口设计 public interface FruitDao {void addFruit(Fruit fruit);vo…

软件开发项目文档系列之十如何撰写测试用例

目录 1 概述1.1 编写目的1.2 定义1.3 使用范围1.4 参考资料1.5 术语定义 2 测试用例2.1 功能测试2.1.1 用户登录功能2.1.2 商品搜索功能 2.2 性能测试2.2.1 网站响应时间2.2.2 并发用户测试 附件&#xff1a; 测试用例撰写的要素和注意事项附件1 测试用例要素附件2 测试用例的注…

大厂的 Git 代码管理规范是怎样的?

分支命名 master 分支 master 为主分支&#xff0c;也是用于部署生产环境的分支&#xff0c;需要确保 master 分支稳定性。master 分支一般由 release 以及 hotfix 分支合并&#xff0c;任何时间都不能直接修改代码。 develop 分支 develop 为开发环境分支&#xff0c;始终…

LabVIEW实现变风量VAV终端干预PID控制

LabVIEW实现变风量VAV终端干预PID控制 变风量&#xff08;VAV&#xff09;控制方法的研究一直是VAV空调研究的重点。单端PID控制在温差较大时&#xff0c;系统容易出现过冲。针对空调终端单端PID控制的不足&#xff0c;设计一种干预控制与PID控制耦合的控制方法。项目使用LabV…

Adobe:受益于人工智能,必被人工智能反噬

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Adobe(ADBE)受益于生成式人工智能的兴起&#xff0c;其一直能实现两位数的收入增长就证明了这一点。 &#xff08;2&#xff09;在生成式人工智能兴起时&#xff0c;该公司就快…

数据结构——顺序表(SeqList)

目录 1. 顺序表介绍 2. 顺序表工程 2.1 顺序表定义 2.1.1 静态顺序表 2.1.2 动态顺序表 2.2顺序表接口 2.2.1 顺序表初始化 2.2.2 顺序表打印 2.2.3 顺序表销毁 2.2.4 顺序表数据插入 2.2.4.1 容量检查 2.2.4.2 顺序表尾插 2.2.4.3 顺序表头插 2.2.4.4 顺序表随机…

selenium自动化测试入门 —— 设置等待时间

time.sleep(3) 固定等待3秒 driver.implicitly_wait(10) 隐性的等待&#xff0c;对应全局 WebDriverWait( driver, timeout).until(‘有返回值的__call__()方法或函数’) 显性的等待&#xff0c;对应到元素 一、time.sleep(seconds) 固定等待 import time time.sleep(3) #…