前言:Unity3D,相信很多人都知道是用来做游戏的。网上也有很多这类视频的教程,我也试着学习过。但是当要实现多人实时对战的教例比较少,而用 PHP 来做 Unity3d 的服务器端的就更少了。我在网上看了一个作者用 C# 做联机服务器端的文章后,就根据他的思路改了一个 PHP 版的。例子只是多个方块在一个场景下移动,所有玩家可以实时看到。以下就以几个小事例简单介绍一下 PHP 与 Unity3D
前言由于最近在使用 workerman 实现 Unity3D 联机游戏的服务端,虽然也可以通过 TCP 协议直接通信,但是在实际测试的过程中发现了一些小问题。比如双方的数据包都是字符串的方式吗,还有就因为是字符串就需要切割,而有时候在客户端或服务端接收时都会出现报错。经过打印日志发现,两端接收到的包都有出现不是事先约定好的格式,这也就是 TCP 的粘包拆包现象。这个的解决方法很简单,网上也有很多,
前言GatewayWorker 是 Workerman 的一个框架,对应用层开发者更友好。GatewayWorker 多了一个网关,也就是 Gateway,负责与客户端连接,消息转发等。而自定义的协议,也就是 gateway 面向客户端提供服务的协议,下面就简单收一下 GatewayWorker 启动后连接的过程吧。GatewayWorker 流程1. 运行 php think wor
前言在平时项目中,有时需要对某些业务进行批处理,比如为了版本兼容,或者不同系统的数据同步等场景下,我们会选择自定义一些指令定时或即时的执行。但是有很多命令需要读表,随着定义的指令逐渐变多,模型里本不涉及业务性的方法也越积越多,甚至某些指令删除了,但是对应的模型方法还在。所以为了不影响业务代码,我们会临时起一个项目专门作为指令处理。但还是有一个问题的是,因为还是以框架新启的项目,自然里面的那些控制器
前言ElasticSearch是一个一个分布式的实时文档存储,每一个字段都可以被索引与搜索,并且能支持PB级别的结构化或者非结构化数据。早期我们应用的全局搜索是简单的SQL模糊查询,为了分担数据库压力所以用了ES,选择他的原因除了以上几点外,还有其提供的API方式简单,于任何对接的编程语言都适用。以下将以PHP的业务场景完善搜索功能。环境ThinkPHP5.1ElasticSearch7.8PHP
前言最近在封装一个日志类时,想借鉴一下 TP 的实现方式,特别注意了一下 TP 日志的驱动。平时常用文件形式记录日志却忽略了还有一个 Socket 方式,只需要连接一下远程服务,程序在单程运行中所打的日志就会出现在浏览器上。但是前提浏览器安装了扩展,接下来就浅谈一下 SocketLog 的简单使用吧。环境SocketLog Chrome 扩展ThinkPHP5.1SocketLog Server&
前言:最近的PHP项目中有使用AMQP,解耦一些业务性的功能模块。因为工作使用的是线上Linux搭建,为了方便测试所以我决定本地搭建一个MQ服务。RabbitMQ简介:MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。 RabbitMQ是一个在AMQP基础上完成
前言上次介绍了RabbitMQ在windows下的安装,以及PHP的AMQP扩展的添加。这里将本地测试的代码放到了服务,所以也就是在Linux上再装一遍。但是这里就省掉直接进入使用。主要是RabbitMQ安装完毕后,管控台的使用以及在PHP中如何调用其接口实现消息的生产和消费。步骤1. Linux安装完rabbitMQ后,没有配置文件,需要去github(github.com/rabbi
前言 之前也通过文章介绍过rabbitMQ的搭建以及在PHP开发场景下的一些使用。这个主要从rabbitMQ的web控制台介绍死信队列的操作,以及代码层面的小应用等。关于死信的原理,rabbitMQ的特性等可以在其他文章中找到,这里就不详细介绍了。场景 死信的场景主要是用于
前言目前项目开发中上传功能很多都是使用云存储,其好处太多这里就不列举了。但是在上传成功后,有些功能场景下需要对存储桶内的文件进行管理。自然把历史的文件列表展示出来就很有必要了。然后有列表就有分页,云存储又不像本地存储直接读文件夹就可以,所以我想了两种方法来解决。方法将上传的文件返回的地址都存到数据库中,取列表就分页的读表返回。使用OSS文档的文件列举方法,好处是不用建表等等,所以下面以这种方式演示
前言:最近接触了一个关于PLC工控的小项目,大概场景是,对方一个茶叶工厂。已经通过各种设备组成了自动化的工控系统。并且也让我的一个朋友做了茶园监控和茶园天气环境等的web页面展示,但是还没有工控设备的数据显示。需求:工控设备已经连接到了一台作为上机位的电脑上,所以要获取设备数据。需要在同一局域网上,通过modbus tcp请求对方已经开放的端口。拿到数据储存到数据库,最后web界面只用按时间顺序获
前言之前有写过死信队列的使用场景以及通过管控台创建死信。这次就通过代码实现死信队列的创建,同时也分享一下RabbitMQ封装的类。准备先准备一个死信队列(最后用来消费)的参数配置,包括虚拟机,交换机,队列,有效时间等,如下。按照上面在RabbitMQ中创建虚拟机和交换机,死信队列。并让交换机与死信队列绑定,操作方法前面有介绍。这里就直接提供rabbitMQ操作的基本封装的类,包括一个基类,生产者类
前言之前也有讲到过es的基本使用,主要是通过PHP代码对es索引,文档等的增删改以及搜索优化的解决方案。而现在为了进一步满足搜索的全新功能,所以就需要一个中文分词器,而为了方便查看或管理es文档,可以使用图形化面板。所以接下来主要介绍es中文分词器的安装和es的web面板。elasticsearch-analysis-ik分词es自带分词,但是没有中文分词,在一众elasticsearch的中文分
前言在业务中开发中,表格的导入导出功能很常见。但是这里主要是使用PhpOffice类库介绍实现导入表格数据的功能。冲突大部分的导入功能,就是通过点击按钮上传一张表格,然后后台读取表格数据根据业务整理后直接插入到数据库,最后再返回给前端。但是如果表格数据庞大,业务逻辑复杂的时候,就会导致导入那一块很臃肿不好维护。解决方法处理方式是把导入与业务数据插入分离,所以在二者之间添加一个队列就可以了。导入只负
前言: 在我们平时做的一个项目中,线上环境突然发现数据库被锁住。导致很多有关数据插入和修改的接口全都瘫痪,项目基于ThinkPHP5.1。报错的时候,我们发现了一条sql错误日志,如下。根据错误信息提示,是说有一个事务回滚时没有找到savepoint 的暂存点。所以问题应该是事务嵌套导致的,目前ThinkPHP5封装的数据层方法是有对事务嵌套进行处理。而MYS
最近有一个小小demo,需要通过 PHP 将用户行为记录储存到 MongoDB,再用 Spark 做协同过滤。由于以前处理跨语言交互是通过消息中间件,这次本地使用 MongoDB 却弄出了几个问题。首先是本地安装了扩展,启动时报找不到模块错误,再个时 PHP 进行的实例化使用时报 MongoClient 和一些函数不存在。最后也推荐一些方便快捷的 MongoDB 图形化工具。
前言由于之前在 PHP 中使用 Kafka 是通过 composer 包的方式,由于 nmred/kafka-php 很久没有维护,并且网上相关问题的文章也比较少。所以我这次换成 PHP 扩展 RdKafka 继续使用,主要介绍扩展安装和这种方式的基本操作。安装1. 下载地址(找到与自己环境匹配的就可以)2. 目录由于 php-rdkafka 依赖 librdkafka,lin
一. 根据当前位置计算四周的经纬度/** * 根据当前位置计算四周的经纬度 * @param $lng * @param $lat * @param float $distance * @return array */ function returnSquarePoint($lng, $lat, $distance = 0.5) { $earthRadius = 63
前言本文章是在同处局域网内的两台windows电脑,MySQL为5.5以上版本进行的一主多从同步配置下。ThinkPHP5分布式连接,读写MySQL分离配置的小例子。数据库部分一. 主库(master)设置。方法/步骤1:phpstudy至少开启MySQL服务,并找到配置文件mysql.ini并进入。方法/步骤2:进入mysql-ini文件找到“[mysqld]”节点,添加以下配置,完成后重启服务
前言现如今,大部分带内容的网站或应用都有视频区了,不说是大厂平台,就连个人开发者也相继在自己网站或小程序上迭代出视频板块。那既然有了视频模块,除个性化推荐,智能审核等这种费钱又耗时的功能外(个人开发者暂缓)。最基本的视频上传,视频播放自然必不可少吧。既然要强调省钱,我当前不会对接点播服务了。毕竟为了有一定的审核和推荐功能,我打算做人工审核。那剩下的关于播放有一定的体验度,还得要用一下OSS了(还是
前言当下,只要是一个初具规模的内容应用都具备个性化推荐系统。比如购物类的会有推荐商品模块,搜索条下有个性化的搜索关键词或词条补全词,社交类的有博主推荐,视频或文章推荐等等。这些功能除了要有庞大的数据量,还要有健全的数据存储仓库建设方案,以及后面对数据的清洗,排序,训练后的推荐模型算法。但是,对于小公司或者说是小项目,在想法还未真正落地就设计大数据存储,推荐算法和一系列大型架构的方案,显然是不符合业
前言 前面一文介绍了通过基础的web项目结构实现简单的内容推荐,与其说那个是推荐不如说是一个排序算法。因为热度计算方式虽然解决了内容的时效质量动态化。但是相对用户而言,大家看到的都是几乎一致的内容(不一样也可能只是某时间里某视频的排前或靠后),没有做到个性化的千人千面。 尽管如此,基于内容的
前言现如今,不管是哪种类型的应用,评论区都少不了。从工具类的到媒体信息流类的,评论留言都是最基本的互动环节。比如抖音短视频下,针对视频每个用户都可以发表自己的观点;而针对用户的评论,其他的用户又可以对其进行评论,依次回复下去。那么,一个视频的评论回复的表如何设计?功能如何实现呢?如标题,这里是用一张表完成,但是在我完成功能后发现拆成两个张更合适(评论表和回复表),这个后面已经改了,最后也会说一下。
前言MySQL从5.7的版本开始支持Json后,我时常在设计表格时习惯性地添加一个Json类型字段,用做列的冗余。毕竟Json的非结构性,存储数据更灵活,比如接口请求记录用于存储请求参数,因为每个接口入参不一致,也有不传和空传的等等。然而在一些特定场景下,需要用Json字段里的某个键用来In查询,并且需要保证不会造成慢查询的前提下,用该键对整个查询结果分组。因为这张表属于是高频储存的表,数据相对庞
前言:前面在本地的windows通过apache的ab工具测试了600并发下“查询指定手机是否存在再提交数据”的注册功能会出现重复提交的情况,并且在注册完成时还需要对邀请人进行奖励,记录邀请记录,对该新用户自动发布动态信息,发短信或发邮件等其他业务功能。所以这里当并发时,注册功能就变得低效且容易出现问题。方法:先对重复提交的问题通过redis解决,再把注册储存用户基本信息以后的操作放到队列中进行异
前言:芝麻 GO 是支付宝给商家提供的一款助力商家进行拉新,促进下单的营销工具。对于用户是先享权益,后承诺任务,只需要签约一份协议就能开始一个任务。说实话,很久没有对接支付宝的产品,在查看文档时,我一度以为芝麻 GO 的先享权益发出去的钱也只不过先冻结一笔金额,等待任务结束金额才会真正到用户钱包。可实际却是用户先享权益的业务功能是由商家自行实现,比如发现金,发业务券包等,最后,商家根据任务的进度可
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号