美文网首页
Laravist 半月谈(5.31 - 6.13) 好久没看群聊

Laravist 半月谈(5.31 - 6.13) 好久没看群聊

作者: 郑方方 | 来源:发表于2016-06-15 22:26 被阅读206次

    本期应该要丢失掉很多聊天记录,因为方方我这阵子很忙,家里的电脑压根没开过qq,要是遗漏很多我只能表示没办法.

    [网站分享]

    (Tomoe)

    https://github.com/davejamesmiller/laravel-breadcrumbs 面包屑

    https://googlecreativelab.github.io/anypixel/

    http://works.ioa.tw/browser_console_qrcode/  在瀏覽器 Console 上畫 QR Code!

    https://hahow.in/ 界面好看的线上课程

    (安正超)

    http://overtrue.me/bootstrap-theme-slim/  

    (欢欢)

    https://github.com/pandao/planeui  

    (Jellybool)

    https://cn.udacity.com/  优达学城

    (Abraham)

    https://github.com/FriendsOfPHP/PHP-CS-Fixer  强制PHP格式

    http://www.zcfy.cc/article/396

    http://libs.useso.com/

    (茄子)

    http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652563725&idx=1&sn=2d8714f18f54b6891ea71dd07d6f0397&scene=23&srcid=06047QY6jzDIKrhNuDBA1u20#rd  玩转Stack Overflow

    (Starriv) 

    http://videojj.com/

    (jjplay)

    http://mint-ui.github.io

    (Lonquan)

    http://www.ectouch.cn/ 一个所谓的开源电商

    (Vikin)

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript  文档

    http://www.maatwebsite.nl/laravel-excel/docs/export

    [业务疑问]

    1) (茄子)

    问个编码规范的问题。  我的一个model有个属性叫做status,存放的是英文代码,我希望为他做一个getter,取出转换后的中文含义。  你们怎么取名?  我现在是用laravel的getter 写成 getStatusDescriptionAttribute,getXXXAtrribute 在laravel里可以这样用  $m->XXXX.

    我主要是想取名是偷懒点,定个规则,比如 status 是代码, 后面加description的 status_description 统一都是中文释义

    答: (littlehz) 先想中文,加个 自然语言、人类语言、显示名称、描述信息这样的都好理解,然后再想这个中文对应的英文,从里面选优雅点、没有歧义的

    2) (Littlehz)

    laravel的cron,怎么配置成在某台服务器定时执行某些操作,某些服务器执行另外的几个,而剩下的服务器没有定时任务?同一个项目,有好多机器,不同机器有不同的计划任务。之前是写crontab,每台机器配不一样的,既然用laravel了,就打算用laravel自己的计划任务调度嘛.我就是想问怎么识别机器的方式好?php代码肯定是一样的,只有hostname、ip不一样咯,生产环境的所有机器env也是一样的。

    答: (安正超) 在代码里完成这个任务注册,识别机器.机器名,或者在机器的ENV文件里定义名称.你不是有一个注册计划任务的地方嘛.根据机器不同来决定注册哪些任务

    3) (晓)

    我用dingo+oauth2.0做验证,在header里传Authorization参数时,服务器获取不到参数(  Request::header('Authorization')  ),但本地是可以的,后来我试了一下自定义哪的参数是可以获取到的( Request::header('sAuthorization')  是可以的),有谁知道这是哪里被拦截了?

    答: (Jellybool) https://github.com/tymondesigns/jwt-auth/wiki/Authentication

    4) (徐先森)

    我想的就是你和我说话我能看到,就是 前台把数据提交到一个公共的频道 然后 index.js 后台把他发给带用户id的频道  然后前台在接受带 用户id频道id 的数据 然后再发送ajax 然后laravel写入数据到数据库 这样就保存了消息记录 前台也实时显示了 数据.

    答: (Littlehz)

    你的逻辑没错。但是我问你一个问题,不知道你考虑了没有。你前台用js监听了一个 websocket连接,你后台的socket.js,有没有判断用户的 cookie/session?

    如果一个伪造的用户过来,不在服务器上的 socket.js 里判断 session ,这个用户能不能使用这个 频道ID?

    鉴别用户的身份,判断用户能不能用这个功能,这就叫鉴权。

    这是简单点的,私聊。频道id就是用户id,频道id与session中的用户id相同,那就有权限。

    往复杂点的鉴权,如果是群聊,频道id是群组id,只有群组的成员用户,才有权限使用这个websocket频道。那你的代码里是不是会很多,要不然在 socket.js 里实现一套ACL或者RBAC逻辑?

    看你的sever.js,你的websocket应该是直连 node 服务器的,与php没有关系。

    5) (茄子) 承接上面的问题

    标准的鉴权方式是怎样? server.js  或者  lua 再调用一次php的鉴权api么?怎么在server.js 里判断?

    答: 

    (Lonquan)

    session_id + user id ,php 的 session, 直接扔到 redis 去

    (Littlehz)

    和下载文件类似,php 鉴权完再丢给 server.js 或者 nginx lua,看你用哪种实现的websocket。

    websocket的location设置为 internal;这样鉴权逻辑就不用写两套,就是websocket不直接和 server.js 或者 nginx lua 通信,从php这边过一手. 利用 nginx 特有的 X-Accel-Redirect 这个 header

    假定nginx 的配置

    server {

                location /1 {

                       internal;

                }

                location /2 {

                       fastcgi_pass xxxx

                }

    }

    正常情况下只能访问 /2 这个 uri

    php鉴权完了,输出

    header('X-Accel-Redirect: /1');

    exit();

    那就能让这个http连接,内部跳转,挂起到 /1 这个 location.

    网上搜索到的方法,大多数是说 X-Accel-Redirect 用于下载文件。其实并不是这个意思,是让 nginx 跳到另外一个 location。至于 location /1 里面是下载文件也好,还是 proxy 反向代理也好,还是连接 redis 也好,还是用 lua 脚本干别的都可以。

    [小技巧]

    1) (Littlehz) php-fpm进程用户,不要和web目录的php文件属组是同一个组的用户

    2) (安正超) 一个开源软件使用的时候排错路线: 我的用法是否正确了? -> 我是否漏掉了哪个部分? -> 看看网友的反馈(issue找找)有没有同样的问题

    3) 获取文件后缀名 getClientOriginalExtension

    [见解]

    1) 如何学习?

    (茄子)

    按自己的想法写一段代码,调试一下,再写一段,再调试,是在浪费自己时间。先把文档精读一遍,每个sample code都动手实现一遍看下效果。这是最基本的要求。

    (安正超)

    很多人都打着“项目着急没时间看文档,先写吧,一边写一边看,遇到问题再查.这种做法只会让你的项目进度更慢,绝对不会更快,这玩意儿与打仗很像啊.你得先了解对方军情才能去搞.边打边招人?边生产枪支?知已知彼才能走得顺,所以你的做法是不科学的.还会经常自己打击自己. “为什么?为什么?大家都用得好好的,我一用就这么多问题?是我笨么?还是我不适合做这行。。”

    用一个东西之前,花时间去把文档过一遍(知识点放到脑袋里),起码一点,出一个问题的时候我知道这是哪个部分的内容,回头再看的时候速度就快很多.而不是扔一条消息到群里,吃完饭回来还没有人回答,那就 SB 了,老板在身后站着看你解决的时候怎么办.

    就是各种补充周末没有吸收到的讯息

    (Littlehz)

    先思考再动手写.

    我大概去年12月开始调研确定新业务用 laravel 框架,然后开始学,大概看了一个星期手册。开始看教主的视屏。当然有别的事情,每周留个laravel的时间应该不到2个小时。然后在这个群里,经常看你们问问题,看别人回答问题,反正看到的我都记得怎么处理。到了5月中旬,才开始写第一行laravel的应用代码。但我现在写 laravel 的应用,基本上不用查什么手册,也基本上不用问问题。

    任何人都不会说问题简单而不答,任何人也不会说因为基础差而认为不适合做,只是发现你的学习方法、思考方式不对,在帮助你提高自己。谁都是从不会到会的。

    2) (Tomoe) Javascript 

    應該說分原始類型和對象(引用)類型,Number String Bool Null Undefined 都是原始類型,其他都是對象 Function Array 等等,在底層處理時,原始類型是直接存入數據,而Object Function Array是存入指針

    3) (Littlehz) 如何开发下载功能

    如果不需要支持多服务器,直接在下载地址nginx rewrite到uploads目录,不要这么复杂

    如果不需要鉴权用户身份,谁都可以下载,那直接nginx配个域名直接到uploads目录。如果需要鉴权,那就php鉴权完了,输出一个header头"内部跳转"到nginx的其他location就好。完全不需要php读文件内容再输出。

    4) (Littlehz) 

    我一直是这么觉得,凡是大一点的系统,一定是要有独立的ID生成器。生成器可以传ID空间这样的参数,在同一个ID空间里自增。生成的ID应当是逐渐增大的,尽量连续,保证绝对不重复,不回退。

    [名词解释]

    Jwt的作用: jwt做的事儿与你的账户系统没有关系,它只是负责把你的敏感信息加密扔到客户端,客户端再拿着那个回来的时候它负责给你解开

    geoip

    snagit  截屏

    licecap 专门录gif

    相关文章

      网友评论

          本文标题:Laravist 半月谈(5.31 - 6.13) 好久没看群聊

          本文链接:https://www.haomeiwen.com/subject/oknydttx.html