/首页
/开源
/关于
长期调研【附近的人】---节骨眼堆个巨无霸服务(六)
发表@2019-09-19 08:53:55
更新@2023-04-27 14:41:18
前面用了整整五节来叨叨出了LBS的N种解决方案,第六篇总该是到了个节骨眼了,我打算在本篇贴一坨凑合能用的巨无霸业务代码放到服务器上。从后面开始,我们将开始围绕着这坨巨无霸代码搞一搞服务拆分。
先说好了,我可没说要搞微服务,我可是什么意思也没说
![](https://ti-node.com/static/upload/6580253742887600128) 正式开始之前,先贴一波儿之前的五篇文章你们先感受下: - 如何搞【附近的人】---挖坑开篇(一) - 继续搞【附近】系列---MySQL搞LBS(二) - 持续搞【附近】系列---听说MongoDB是专业的(三) - 接着搞【附近】---Elasticsearch还是Postgre?(四) - 持续搞【附近】---长连接坐标流和“地理围栏”(五) 我们本篇中需要实现的功能有: - 用户登陆、注册 - 用户能看到附近的人 后面服务拆分到一定程度,PM会找我们添加新业务功能的,到时候用其他语言写写? 为了能让巨无霸服务跑起来,要准备的东西有: - 要么你自己笔记本上整个linux - 要么你薅羊毛薅来的云服务器。此处安利一个小羊毛,有需要的自己去薅... ![](https://ti-node.com/static/upload/6580254044659384321) - Linux系统,用Windows的自己想办法 - 世界上最好的语言,然后安装好swoole扩展,1.9版本就好,能用就行 - 万年兵油子MySQL和新兵蛋子MongoDB 在等我写这个巨无霸服务的时候,你们可以去准备一下上面的东西(此时为北京时间2019年8月18号15点39分)... 好了,我要写屎山巨无霸代码去了...大家在准备好上述内容后,可以观赏一些名场面:
有胜阅兵
![](https://ti-node.com/static/upload/1111487904_2.gif#width-full)
宝庆溜冰
![](https://ti-node.com/static/upload/1111487904_4.gif#width-full)
乃超奔跑
![](https://ti-node.com/static/upload/1111487904_5.gif)
云飞打鸟
![](https://ti-node.com/static/upload/1111487904_6.gif)
老李开炮
![](https://ti-node.com/static/upload/1111487904_7.gif) 好了,我屎山巨无霸服务写好回来了(此时为北京时间2019年8月19号0点02分)... 简单说下代码目录构成,如下图: ![](https://ti-node.com/static/upload/6580256202104504320) - System文件夹里是Ti-rpc的核心实现,可以直接忽略... - Application文件夹里就比较常见了,就是业务代码,非常非常简单 - momo.sql是数据库结构,数据库名为momo,数据表ti_user。注意调整数据库用户名和密码 - init-user-data.php脚本的工作是先向MySQL数据库中插入100条数据,然后再向MongoDB中插入这100个用户的经纬度信息 ------------
部署以及启动流程
去老地方https://github.com/elarity/wechat-official-accounts-demo-code把代码扒下来...不用放到nginx web目录中,因为基于swoole直接利用swoole的http server - MySQL里创建好momo数据库,用户名为root,密码为123456 - php init-user-data.php插入100条用于测试的用户数据 - php index.php start开启服务(php index.php可以看下用法),然后会在8000端口上开启一个http服务 ------------
API说明
反正我是没功夫写图形化的客户端调用,诸位自己凭借自己本事折腾,脑补、想象、凭借信仰...etc,各显神通吧。我把主要api提供出来,凑合看吧... ```php 用户注册 接口地址:http://host:8000/v1/user/register 调用方法:POST Content-Type:application/json 数据编码:JSON 提交参数:{"param":{"username":"wahaha","password":"123456"}} 客户端CASE: "8000", CURLOPT_URL => "http://host:8000/v1/user/register", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "", CURLOPT_HTTPHEADER => array( "Content-Type: application/x-www-form-urlencoded", "Postman-Token: 796375a7-3248-4405-90fe-920dcd200585", "cache-control: no-cache" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } 成功返回: { "code": 0, "data": { // 注意获取到token后,访问其他登陆后的接口,将token放到http header "token": "efc31dbf1aabe0ca3f66509ebb9d6a02", "user": { "id": "2", "username": "xiaodushe", "createTime": "2019-08-17 21:18:52" } } } 用户登录 接口地址:http://host:8000/v1/user/register 调用方法:POST Content-Type:application/json 数据编码:JSON 提交参数:{"param":{"username":"wahaha","password":"123456"}} 成功返回: { "code": 0, "data": { // 注意获取到token后,访问其他登陆后的接口,将token放到http header "token": "efc31dbf1aabe0ca3f66509ebb9d6a02", "user": { "id": "2", "username": "xiaodushe", "createTime": "2019-08-17 21:18:52" } } } 发现附近的人 接口地址:http://host:8000/v1/nearby/index 调用方法:POST Content-Type:application/json 数据编码:JSON 提交参数:{"param":{"lat":"39.9385449","lng":"116.1165885"}} 返回数据: { "code": 0, "data": [{ "id": "447", "username": "hCwrNc9U", "createTime": "2019-08-17 23:33:43", "distance": 26062.857472747 // 单位是米 }, { "id": "409", "username": "xyQuqgQp", "createTime": "2019-08-17 23:33:40", "distance": 27304.407001945 // 单位是米 } } ```