• 记一次nodejs的长连接websocket服务故障
    记一次nodejs的长连接websocket服务故障有1条评论

    故障最初表现是这样的,在客户端正常连接一段时间之后,无任何征兆的服务端会突然触发close事件从而进行连接断开的清理工作,将Redis和Mysql内的在线数据都清理掉了,导致推送时找不到该设备,但是客户端直接请求服务端的数据,服务端均能够正确响应。

    最初以为是node的ws模块有bug,在触发close事件的时候并没有真正关闭连接,所以在close事件触发的时候直接调用了socket._socket.close()来强制关闭连接,然而并没有什么卵用,情况并没有任何变化。

    随后开始了wireshark抓包,发现故障时,客户端会发来未知的opcode
    fecfce40-779f-11e6-8edf-f103b4c1845d

    在服务端收到这个错误的opcode后,[……]

    Read more

    Read more
  • nginx+php-fpm无法使用PUT和DELETE等方法
    nginx+php-fpm无法使用PUT和DELETE等方法无评论

    群里讨论nginx+fastcgi和apache+mod_php时,有人提到了nginx+fcgi不支持PUT和DELETE,会报405,所以只好通过劫持405状态码的方法来处理这些方法

    无标题

    但是这种方法过于蛋疼,再加上我以前在写php的时候是正常使用过这些方法的,于是提出了异议并且实现了PUT方法的demo。

    对比双方的fastcgi配置后,并没有发现什么区别,唯一的区别是我使用的是Tengine,而对方是nginx,而Tengine文档里并没有提到这一改动,于是只好继续测试

    QQ截图20160603203050
    真的出现了405,难道真的是Tengine对这方面做出了改动?

    不过如果输入完整的url,事情就有了转机[……]

    Read more

    Read more
  • Space Engineers 可编程方块从入门到放弃
    Space Engineers 可编程方块从入门到放弃有1条评论

    好好的一个游戏,玩着玩着就写起了代码

    游戏里的编辑器没有代码提示没有代码高亮,甚至连括号对齐都没有,于是我们首先需要搭一个VS下的开发环境,用于写代码

    并不是所有C#的内置类或者游戏类均可用,文章的最后会说明

    首先需要把游戏源码clone下来https://github.com/KeenSoftwareHouse/SpaceEngineers/

    为了不要一不小心修改了游戏代码,可以在解决方案里新建一个Console项目,然后添加对游戏项目的引用,然后让生成出来的类继承MyGridProgram类,
    并且修改Main方法,拿掉static,参数是(string args),
    添加需要用到[……]

    Read more

    Read more
  • WordPress升级PHP7后白屏
    WordPress升级PHP7后白屏无评论

    把bmclapi安顿到其他服务器上后,这台服务器终于有内存跑第二个fpm了,所以决定安装一下php7,让dz跑在5.5的fpm上,单独给wp上7

    安装完成后发现首页白屏,但是error_log里没有输出,即使打开WP_DEBUG,也只有几个Notice和Deprecated,按理来说不应该会导致白屏。

    直接输入url进入文章页面终于有报错了,报错信息是called undefined function eregi(),没有堆栈

    查了一下这个函数的文档http://php.net/eregi

    Warning This function was DEPRECATED in PHP 5[……]

    Read more

    Read more
  • carrotmq中文文档
    carrotmq中文文档无评论

    CarrotMQ是一个给NodeJS使用的RabbitMQ客户端,基于官方的amqplib,能够简化amqplib的复杂的操作

    Version npm
    NPM Downloads
    Dependencies
    NPM

    使用姿势

    RPC

    RPC Over Exchange

    events

    ready

    当carrotmq连接到rabbitmq并且声明好所需的exchange和队列后触发
    mq.on('ready', function(){});

    error

    我们[……]

    Read more

    Read more
  • for of和forEach的效率比较
    for of和forEach的效率比较有1条评论

    因为最近开始用generator处理异步逻辑了,所以遇到需要循环的地方如果使用数组,数组里再有异步逻辑的话使用forEach再带一个函数进去是无法当成异步逻辑处理的,所以就想用for of循环做枚举遍历,顺手写了个小测试当做性能对比

    结果发现效率是for of最差
    for of: 1351.440ms
    forEach: 688.484ms
    reduce: 462.045ms

    还有就是从哪个版本开始node的console.time能够精确到千分之毫秒了啊……

    Read more
  • nodejs计算md5时未指定编码导致中文md5值错误
    nodejs计算md5时未指定编码导致中文md5值错误无评论

    当使用如下代码计算md5时

    如果update传入的是中文字符串

    计算出来的md5是
    b48404099575c247af9872cd89a591fb

    实际上应该是
    c3ade805345a2466babaf1066ffe12bc

    需要手工指定

    原因是,update方法不传入参数的时候默认使用的是binary编码,也就是latin-1
    http://npm.taobao.org/[……]

    Read more

    Read more
  • 自定义JSON.stringify返回的Date格式
    自定义JSON.stringify返回的Date格式有1条评论

    默认情况下JS的JSON.stringify会将对象内的Date类型的属性按照ISO时间格式解析,得到的内容类似于

    但是这种时间的格式在非JS运行环境下解析起来是非常费劲的,关于这件事情,Android和iOS的开发跟我抱怨了很久

    后来,在stackoverflow上看到了
    http://stackoverflow.com/questions/31096130/how-to-json-stringify-a-javascript-date-and-preserve-timezone

    发现可以通过重载Date的toJSON[……]

    Read more

    Read more
  • nodejs集成支付宝所遇到的坑
    nodejs集成支付宝所遇到的坑有13条评论

    首先,使用express框架,能够接收到支付宝发来的POST notify请求,但是解析出来的body一直为空对象,然后将整个请求log出来查看,发现支付宝发来的Content-Type是一个奇葩的

    application/x-www-form-urlencoded; text/html; charset=utf-8

    这TM什么鬼玩意,到底是form还是html,于是bodyParser就扑街表示不认识了

    解决方式也非常简单暴力,在bodyParser中间件之前添加一个中间件

    其次是校验notify的签名时,支付宝[……]

    Read more

    Read more

Back to Top