PHP转NodeJS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yjh4866/article/details/83903042

        六月份回来到太原,不急于找工作,也终于下定决心学习一下微信小游戏,出一款小游戏练练手。准备用CocosCreator,结果微信平台提示某个js文件太大,不建议用引擎。好吧,所有界面只好直接用js写,简单写了一个界面切换引擎。

        很早之前写过一款动物棋(斗兽棋)的游戏,搞不定服务端无法实现网络对战,只能俩人在单机上玩,前半年终于用HTTP协议实现了iOS版的俄罗斯方块游戏对战。一直以为实时对战只能用TCP实现,今年了解到WebSocket可以做到,服务端只会用PHP,恰好腾讯云小程序专用服务器支持PHP,而且也支持WebSocket。经历重重困难,加急弄到软著,八月初,我的微信小游戏终于上架了。

        后来发现经常连接不上,可能是WebSocket没维护好,客户端退出游戏,但服务端没释放连接造成。于是准备改用HTTP实现,实时性差些,但维护起来比较轻松。原数据库用的是腾讯云服务器自带的,准备改用我在阿里云租的服务器自带的数据库,这样就可以与我的iOS平台的俄罗斯方块对战的了。但微信小游戏的url只支持https,所以服务端还得用腾讯云。不想一下子中断了旧版支持,所以旧版依然用腾讯云数据库,WebSocket实现;新版改连阿里云数据库,HTTP实现。这样服务端就出现了俩数据库的连接,于是将DBPDO复制一份改了个类名用于连接阿里云数据库。腾讯云PHP用的CodeIgniter,接口类的类名首字母是大写,但对应的接口首字母是小写,这个问题困扰了我好久,咨询了朋友才终于连接上自己写的接口。

        好多年前就注意到CodeIgniter,到现在都没弄清楚这个框架怎么用。PHP写的接口上传到服务端就能直接调用,比NodeJS省心好多,所以学习NodeJS一直没提上日程。十月份有空学了一下,发现上手不算太难,很容易就弄明白框架的工作机制了,腾讯云小游戏服务器也支持NodeJS,所以打算将服务端改成NodeJS。客户端暂时不打算升级,所以就得用NodeJS支持原所有接口。

        客户端服务端都是我一个人实现,所以能请求到所需数据算完事。改用NodeJS的过程中才发现,之前写的接口很不规范,遇到好多问题:(1)之前的错误码是error字段,NodeJS是code;(2)有些接口的数据在data字段里,有些直接跟data字段同级;(3)登录接口的userinfo字段下还有一层userinfo;(4)原先有个接口叫message,现在这个类名是微信小游戏框架在用;(5)最麻烦的是,原先一个POST请求的body里直接放的字符串,但Content-Type设置的是json,koa-bodyparser报JSON格式错误,压根到不了我的接口实现就返回给客户端了。

        (1)response错误码是code,以后就用它了,为了支持原接口,在response.js的ctx.body中同时支持error;(2)针对接口,将data中的数据提到data同级一份;(3)登录接口多设置一个userinfo字段即可;(4)message.js最开始先判断一下是否存在某个特定字段,存在的话调用另外一个脚本;(5)必须在koa-bodyparser调用之前拦截下来,直接获取body中的字符串进行处理(拦截下来修改Content-Type后再交给koa-bodyparser应该也行)。

        最终,我的PHP服务器改为NodeJS了。

猜你喜欢

转载自blog.csdn.net/yjh4866/article/details/83903042
今日推荐