自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(248)
  • 资源 (7)
  • 收藏
  • 关注

原创 TCP相关细节

服 务 端 会 记 录客 户 端 最 后 一 次 发 送 P I N G 消 息 的 时 间 , 如 果 很 久 没 有 收 到 (比 如 3 分 钟 ) , 就 假 定 连 接 不 通, 服 务 端 会 关 闭 连 接 , 释放系统资源。一 般 情 况 下, 一 个 端 又只能由一个进程独占,假设服务端程序都绑定了1234端又,若开启两个服务端程序,虽 然, 第一个开启的程序能够成功绑定端又并监听,但第二个程序会提示“没有设 定端又复用, 绑定会失败,提示端又己经在使用中,只好等十几分钟再重试了。

2024-06-15 16:06:20 715

原创 socket收发数据的处理

readBuff[0] 代表缓冲区的第1 个字节,readBuff[1] 代 表 缓 冲 区 的 第 2 个 字 节, ( readBuff[1] < < 8 ) 代 表 将 缓 冲 区 第 2 个 字 节 的 数 据 乘 以 2 5 6 , 中 间的“|” 代表逻辑与,在这里等同于相加。因为我们规定必须使用小端编码,一个简单的办法 是,判断系统是否是 小端编码的系统,如果不是,就使用Reverse() 方法将大端编码转换为 小端编码。(pbyte+1)<< 8),如果是大端编码,返回的是(

2024-06-15 14:31:54 743

原创 unity实现一个大乱斗

在如下的代码中,“delegate void DelegateStr(string str)” 创建了一个名为“Delegatestr" 的delegate 类型,它可以引用带有一个string参数、返回值类型为void 的方法。其中:“ Move” 代表这条协议 是移动同步协议,“127.0.0.1:1234” 代表了客户端的身份,“10,0,8〞三个值代表目的地的 坐标。结合委托的知识,客户端程序提供各种消息类型(通过消息名区分)的处理方法,网络 模块解析消息,将不同类型的消息派发给不同的方法去处理。

2024-06-12 18:43:48 624

原创 unity(select)

服 务 端 调 用 S e l e c t , 等 待 可 读 取 的 S o c k e t , 流 程 如 下。服务端使用主循环结构while(true){…初 始化 clients列 表。初始化 listenfd。

2024-06-11 19:52:12 190

原创 socket(poll)

由于客户端断开后,ReadClientfd 会删除clients列表中对应的客户端信息,导 致clients列表改变,而RcadClientid 又是在foreach (ClientState s in clients.Values)的循 环 中被 调 用 的, clients 列 表 变 化 会 导 致 遍 历 失 败 , 因 此 程 序 在 检 测 到 客 户 端 关闭 后 将 退 出 foreach 循环。如果设置较长的超时时间,服务端 将无法及时处理多个客户端同时连接的情况。Poll 的参数说明。

2024-06-11 18:21:53 725

原创 unity 简易异步socket

由于异步回调是在其他线程执行的,如 果在BeginReceive给text.text赋值,Unity会 弹出“get isActiveAndEnabled can only be called from the main thread”的异常信息,所以程序只给变量recvStr赋值 , 在主线程执行的Update 中再给text.text 赋值(如图2-5所示)。对应的End- R e c e i v e 的原 型 如 下, 它 的返 回 值 代 表 了 接 收 到 的 字 节 数。

2024-06-11 14:31:32 876

原创 Unity3D入门基础知识汇总

右上边可以切换布局。左边选择Shaded wireframe,可以看到3D物体的都是由三角形组成的。

2024-06-06 11:37:07 902

原创 unity基础三

video直接放在plane上面的video player组件即可,脚本也挂在plane上面。不但控制着组件的旋转、位置、缩放并且还控制着组件间的父子关系。做了一个游戏里面看电视的功能,没什么难度,说一点。屏幕用的plane模型,直接贴在TV前面。depth(深度)值越高,越优先显示。需要商城下载一点素材。

2024-06-05 16:27:33 297

原创 热更新简述

当需要热更新时,让进程1调用fork函数,系统会复刻一个与进程1一摸一样的进程2,两个进程共同监听8001端口。如图9-21所示,需要热更新时,开启一个新版本的逻辑进程(图中的game2),让网关把旧连接的请求转发给game1(图中的①)、把新连接的请求转发给game2(图中的②)。利用fork、exec函数实现进程切换,原理:fork和exec函数有一个重要的特性,即可以让复刻后的进程和新开启的进程继承原进程的文件描述符,因此新进程也可以直接访问原进程监听的端口的socket。

2024-06-05 14:55:49 391

原创 【协程】协程的设计原理

NtyCo实现了一个 IO 异步操作与协程结合的组件。

2024-06-04 18:47:10 600

转载 skynet框架应用 (六) 服务调度

​ 每次使用skynet.fork其实都是从协程池中获取未被使用的协程,并把该协程加入到fork队列中,等待一个消息调度,然后会依次把fork队列中协程拿出来执行一遍,执行结束后,会把协程重新丢入协程池中,这样可以避免重复开启关闭协程的额外开销。以上做法是不正确的,在skynet.start函数中的服务初始化代码不允许有阻塞函数的存在,服务的初始化要求尽量快的执行完成,所有的业务逻辑代码不会写在skynet.start 里面。当然,一个好的服务端,肯定不能一直出现中断掉的协程。

2024-05-11 09:06:30 45

转载 skynet框架应用 (五) 服务别名

​ 每个服务启动之后,都有一个整形数来表示id,也可以使用字符串id来表示,例如::01000010,其实就是把id:0x01000010转换成字符串。​ 但是这个数字的表示方式会根据服务的启动先后顺序而变化,不是一个固定的值。如果想要方便的获取某个服务,那么可以通过给服务设置别名来。​。

2024-05-11 08:44:39 124

转载 skynet框架应用 (四) 服务类型

​ 调用queryservice时,也可以选择是否传递第一个参数true, 表示查询的是当前skynet节点的全局唯一服,还是所有节点的全局唯一服。第一次创建唯一服,返回服务地址,第二次创建的时候不会正常创建服务,只是返回第一次创建的服务地址。​ skynet中的服务分为普通服务与全局唯一服务。​ 每调用一次创建接口就会创建出一个对应的服务实例,可以同时创建成千上万个,用唯一的id来区分每个服务实例。全局唯一的服务等同于单例,即不管调用多少次创建接口,最后都只会创建一个此类型的服务实例,且全局唯一。

2024-05-11 08:32:43 19

转载 skynet框架应用 (三) 构建服务的基础API

​ 以上出现找不到logger.so的情况,其实不仅仅是这个模块找不到,所有的模块都找不到了,因为在config包含的路劲conf.path中,所有的模块路劲的引入全部依靠着相对路劲。也就是在skynet.start之前运行。另一种方式启动想要的服务,可以在main.lua运行后,在console直接输入需要启动的服务名称.1、预先加载的环境变量是在conf中配置的,加载完成后,所有的service都能去获取这些变量。​ 4、环境变量设置完成后,及时服务退出了,环境变量依然存在,所以不要滥用环境变量。

2024-05-11 08:08:00 38

转载 skynet框架应用 (二) 搭建skynet

原文链接:https://blog.csdn.net/qq769651718/article/details/79432809。我们要运行的的客户端是example/client.lua 这个lua脚本文件,那么首先你要有一个lua虚拟机程序。​ 注意:如果安装失败,请先安装一下只支持库。

2024-05-10 13:54:54 25

转载 skynet框架应用 (一) skynet介绍

​ 每个服务都是严格的被动的消息驱动的,以一个统一的 callback 函数的形式交给框架。强隔离性: Actor中的方法不能由外部直接调用,所有的一切都通过消息传递进行的,从而避免了Actor之间的数据共享,想要观察到另一个Actor的状态变化只能通过消息传递进行询问。是一个轻量级的为在线游戏服务器打造的框架。状态(state):Actor中的状态指的是Actor对象的变量信息,状态由Actor自己管理,避免了并发环境下的锁和内存原子性等问题。二、一个服务向另一个服务发送的消息的次序是严格保证的。

2024-05-10 13:43:10 19

原创 unity基础(二)

当使用Unity的LoadSceneMode.Additive时,开发人员可以在当前场景中加载一个新的场景,而不需要卸载当前场景。//这个是获取真正的激活状态,就是是否显示出来了 例如自己显示否跟父物体也有关 这个包含了。//Asset路径 移动端 主机游戏:可读 不可写 pc端:可读可写。// Assets下面的streamingAssetsPath路径。//只是激活状态的勾有没有打上 也就是只判断自己。//获取脚本挂载的游戏物体。//场景中最外层的游戏物体。//场景是否加载完成。

2024-05-07 09:39:38 595

原创 unity基础(一)

通过按照上述步骤,在脚本执行顺序列表中将 ScriptA 移动到 ScriptB 之前,然后保存设置,就成功地设置了脚本的执行顺序。在 Unity 中,如果有多个脚本,并且它们之间的执行顺序很重要,可以通过编辑器设置来确保它们按照自己期望的顺序执行。通过在 Unity 编辑器中设置脚本的执行顺序,可以确保它们按照自己期望的顺序执行,从而有效地管理项目中的脚本执行逻辑。这样,可以确保一个脚本在另一个脚本之前执行,也可以在出现的面板中点击+号,选择要设置顺序的脚本。这样就成功地设置了脚本的执行顺序。

2024-05-06 09:18:09 967

原创 代码事件派发机制(观察者模式)

通过 AddListener 方法可以为指定事件名称注册一个事件监听器,而 Dispatch 方法用于派发事件并通知相应的监听器。在 dispatch() 方法中,我们检查指定事件名称的监听器列表是否存在,然后依次调用每个监听器函数,并将事件数据作为参数传递给它们。在实际的应用中,你可以根据需要扩展和定制事件调度器,添加更多的事件和监听器,以实现更复杂的业务逻辑。最后,在示例的最后部分,我们通过调用 dispatch() 方法模拟触发了两个事件,然后相应的监听器函数被调用并处理事件。

2023-10-07 11:21:55 412

原创 随机算法了解

伪随机数生成器是确定性的,它们的输出是基于一个固定的种子或状态值。因此,如果你需要更可靠和高质量的真随机数,建议使用专门的硬件设备或第三方真随机数服务来获取随机数。请注意,rand.Read() 函数在获取真随机数时可能会阻塞,这取决于底层操作系统的实现和可用的随机源。线性同余算法是一种常见的伪随机数生成算法,它可以生成一系列看起来随机的数字序列。因此,在实际应用中,如果需要高质量的伪随机数序列,建议选择更复杂和安全的伪随机数生成算法,或者使用真随机数生成器。c:偏移量,用于控制序列中的移动。

2023-10-07 10:54:56 391

转载 【idea错误解决】Error:java: 不再支持源选项 5。请使用 6 或更高版本。

NO1.点击File—>Project StructureNO2.点击左侧栏Modules–>找到对应的language levelNO3.保存以上修改,点击File–>Settings以上操作即可解决idea报的此类错误

2021-03-10 11:22:55 515

原创 简单PHP代码实现一个orm

<?phpabstract class Model { protected $pk = 'id'; protected }

2021-03-02 15:38:04 285

转载 PHP7垃圾回收机制详解(附GC处理完整流程图)

垃圾回收:简称GC。顾名思义,就是废物重利用的意思。说垃圾回收机制之前,先接触一下内存泄漏。内存泄漏:某大神重口味充满画面感的形象解释:大概意思就是申请了一块地儿拉了会儿屎,拉完后不收拾,那么那块儿地就算是糟蹋了,地越用越少,最后一地全是屎。说到底一句,用了记得还。一定程度上说,垃圾回收机制就是用来擦屁股的。c语言垃圾回收机制:如果用过C语言,那么申请内存的方式是malloc或者是calloc,然后你用完这个内存后,一定不要忘了用free函数去释放掉,这就是手动垃圾回收,一般都是大神用这种

2021-03-01 16:26:08 336

转载 彻底解决Intellij IDEA中文乱码问题

关于JAVA IDE开发工具,Eclipse系列和Intelli IDEA是大部分公司的主要选择,从开发者的选择角度,Intellij IDEA似乎比Eclipse系列更受欢迎一些。当我们使用Intellij IDEA开发时,我们发现出现中文乱码问题,造成中文乱码的根本原因时开发工具和系统环境编码格式不匹配,本篇采用理论结合实际的角度,彻底解决该问题。一 Intellij IDEA乱码问题重现如下图所示,Intellij IDEA显示中文为乱码。二 解决问题(一)问题识别根据Intellij

2021-02-07 11:33:53 444

转载 怎么理解PHP代理模式

本篇文章主要给大家用实例代码来详细介绍PHP代理模式。在前面的文章中,我们已经给大家简单介绍了PHP代理模式的基础概念,相信大家对代理模式也有了一点了解。本节内容就结合具体的代码示例,给大家介绍PHP代理模式。代码如下:/* * 代理模式 *///代理抽象接口interface shop { public function buy($title);}//原来的CD商店,被代理对象class CDShop implements shop { public funct

2021-02-04 18:14:35 122

转载 为什么明知违法,互联网大厂还在提倡996?

“互联网大厂又不差几个钱,干嘛不能多招几个人,非要让员工996 ?”1 效率诅咒所有公司的本质就是追求效率。虽然有些公司未必能理解这句话,但他们本质上还是在追求效率。从早些年某些厂房24小时不停工,到某些物流仓储公司投入重金采用机器人分拣,从西贝莜面村优化菜单提高翻台率,到互联网公司强行996解除35岁以上的员工,本质上没有任何区别,都是在追求效率。差异的是,有些合法,有些不合理,有些不合法。‍‍为什么不是传统公司,反而看上去很高科技的互联网公司在 996?因为传统公司大多是一个完整的价值.

2021-01-19 11:22:05 798

转载 日志处理两大生态Splunk和ELK深度对比

随着Splunk越来越被大家熟知和认可,现在市面上也不断涌各种同类产品,作为大数据搜索界的翘楚Splunk和ElasticSearch,绝对值得我们去学习,探索和使用,因此为了造福Splunk的铁粉和新粉们,小编特邀了Splunk的资深架构师,江湖人称“陶指导”的陶刚为大家就架构,功能,产品线,概念等方面将Splunk和ElasticSearch做了一下全方位的对比,希望能够给大家在制定大数据搜索方案的时候有所帮助。陶刚在Splunk上海担任资深架构师,负责数据采集和云平台产品的技术架构。 拥有丰富的企业

2021-01-06 10:15:06 949

转载 MySQL的连接池、异步、断线重连

MySQL长连接MySQL短连接每次请求操作数据库都需要建立与MySQL服务器建立TCP连接,这是需要时间开销的。TCP连接需要3次网络通信。这样就增加了一定的延时和额外的IO消耗。请求结束后会关闭MySQL连接,还会发生3/4次网络通信。close操作不会增加响应延时,原因是close后是由操作系统自动进行通信的,应用程序感知不到长连接就可以避免每次请求都创建连接的开销,节省了时间和IO消耗。提升了PHP程序的性能。断线重连在cli环境下,PHP程序需要长时间运行,客户端与MySQL服务器之

2021-01-04 11:42:54 495

转载 简述微服务架构

作者:老刘链接:https://www.zhihu.com/question/65502802/answer/802678798来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。一文详解微服务架构本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程

2021-01-04 11:39:49 326

转载 java注册数据库驱动

传统的使用jdbc来访问数据库的流程为:Class.forName(“com.mysql.jdbc.Driver”);String url = “jdbc:mysql://localhost:3306/test?user=root&password=123456″;Connection con = DriverManager.getConnection(url);Statement statement = con.createStatement();最开始使用的时候,不明白为什么首先要加

2020-12-06 17:15:16 2049

转载 MySQL事务

1. 事务的基本介绍 1. 概念: * 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。 2. 操作 1. 开启事务: start transaction; 2. 回滚:rollback; 3. 提交:commit 3. 例子: CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), bala

2020-11-27 15:39:32 98

原创 java JUnit

JUnit是什么?JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道

2020-11-25 19:24:16 1477

原创 java开发常用快捷键

IDE: IDEA快速生成main方法psvm 回车快速生成输出代码sout 回车代码补全Ctrl+Alt+Space: 内容提示查看源码Ctrl+B重写toStringAlt+Insert 选择toString在类的空白区域,右键->Generate-> 选择toString重写equals方法alt + insert 选择equals() and hashCode(),IntelliJDefau

2020-09-25 15:35:13 439

转载 单点登录原理

一、单系统登录机制1、http无状态协议web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系  但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求;要鉴别浏览器请求,必须清楚浏览器请求状态。既然http协议无状态,那就让服务器

2020-08-27 07:12:17 205

转载 Laravel Broadcaster 进阶使用 & 原理分析

上一篇简单介绍了什么是 Laravel 广播,本篇我们来剖析一下 Laravel 广播的原理,以及使用时的注意事项。正好看到一篇老外写的搭建攻略,也非常不错:https://medium.com/@dennissmink/laravel-echo-server-how-to-24d5778ece8b开始使用Laravel App Server - 应用服务端修改 .env 的 BROADCAST_DRIVER = redis,同时启用 QUEUE_DRIVER 队列服务,广播队列应独立一条,默认走

2020-08-25 09:16:48 551

转载 Laravel Broadcasting广播机制(Redis + socket.io)-学习实例

借助Laravel Broadcasting你可以使用上时下很热的Websocket技术。注意:请务必使用较新版本的 Laravel。Laravel在最近几个版本进行过比较大的重构,比如路由从 app\Http\routes.php 拆分为到 routes 目录下的多个文件,包括广播在内的各个附加组件也都进行了重构并正式写入文档。所以网上有些教程(特别是入门教程)可能是根据旧版本来写的,容易让你迷惑。当安装完Laravel后执行以下命令查看Laravel版本php artisan --version如

2020-08-25 09:02:11 937

转载 实时聊天室:基于Laravel+Pusher+Vue通过事件广播实现

之前有说过要整理出一篇事件广播的教程,今天终于有时间把这篇文章给写了出来,本次的教程是基于Laravel+Pusher+Vue,以事件广播作为核心技术,让你可以快速搭建起一个实时聊天室应用,话不多说,让我们来直接看看具体的内容吧。应用初始化安装配置首先还是通过 Composer 安装一个全新的聊天室应用:1composer create-project laravel/laravel chatroom --prefer-dist由于要用到事件广播,所以需要取消 config/app.php 中广

2020-08-25 08:25:43 691

转载 深入浅出 Laravel Echo

看源代码,解析一次完整的 public channel 下发流程。此图来自网上,如有侵权,通知我删除通过上图,我们至少要知道两件事:Laravel 和我们的前端 (vue) 没有直接关联,它们通过 Socket.io Server 来做中转,这是怎么做到的呢?怎么发送 Brocadcasted Data?下面来一一解析。BroadcastServiceProviderBroadcastServiceProvider 主要包含了 Broadcast 相关的五个驱动器、Broadcast 事件

2020-08-24 08:53:52 374

转载 简单 16 步走一遍 Laravel Echo 的使用

官方文档推荐使用 Pusher 或者 laravel-echo-server (是一个使用 NodeJS + Socket.IO 实现的 WebSocket 服务端)。在国内,个人还是不推荐使用 Pusher,访问速度有所影响,而且其还是一个商业产品。今天利用最简便的「16」步,走一遍代码集成 laradock 和 laravel-echo-server 来使用 Laravel Echo。搭建基础环境// 1. new projectlaravel new echolearning// 2.

2020-08-24 08:17:01 1352

转载 Laravel Broadcast——广播系统源码剖析

在现代的 web 应用程序中,WebSockets 被用来实现需要实时、即时更新的接口。当服务器上的数据被更新后,更新信息将通过 WebSocket 连接发送到客户端等待处理。相比于不停地轮询应用程序,WebSocket 是一种更加可靠和高效的选择。我们先用一个电子商务网站作为例子来概览一下事件广播。当用户在查看自己的订单时,我们不希望他们必须通过刷新页面才能看到状态更新。我们希望一旦有更新时就主动将更新信息广播到客户端。laravel 的广播系统和队列系统类似,需要两个进程协作,一个是 laravel

2020-08-24 07:58:55 542

资料.rar redis java jar包 window下redis软件

window 的redis软件 redis的jar包

2021-03-08

java_json_lib.rar

java的json解析 lib

2021-03-04

lib.rar资源包~~~~

jstl包

2021-02-05

简单登录代码 java

简单的java的一个登录代码 案例

2021-01-03

JavaEE7-api手册

JavaEE7手册

2021-01-02

jsoup-1.11.2.jar JsoupXpath-0.3.2

java的两个包 JsoupXpath-0.3.2 jsoup-1.11.2 解析xml

2020-12-26

java jdbcTemplate 资源及实例代码

spring 包 druid包 cp3包 数据mysql链接包

2020-12-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除