[返回] [最新] [最热门] [最高评价]

在Golang的HTTP请求中共享数据

首先,我们需要先明确一下问题的描述:本文所要讨论的共享数据可不是指的 cookie、session 之类的概念,它们描述的是在「请求间」共享数据,而我们关注的是在「请求中」共享数据,也就说是,在每个请求中的各个 middleware 和 handler 之间共享数据。

实际上,我之所以关注这个问题源自 httprouter,众所周知,httprouter 是目前 Golang 社区最流行的 HT
...

老王 2019-02-08 11:30 | 查看: 7598

学习Golang的HTTP中间件机制

因为 Golang 内置的 net/http 天生就支持 HTTP 中间件机制,所以即便不用 gin 之类的 Web 框架,我们也可以写出扩展性很好的 Web 应用。

假如你不了解 Golang 的 HTTP 中间件机制的话,那么可以把它看成是一个洋葱:

通过洋葱看中间件

每一个中间件都是一层洋葱皮,其中每一个中间件都可以改变请求和响应,我们可以很自然的把不同的逻辑放到不同的洋葱皮里,更代码
...

老王 2019-01-31 23:23 | 查看: 5592

推导利滚利公式

自从开始学习智能合约之后,接触到了很多「资金盘」游戏,比如前段时间大火的 Fomo3D,不过自从 333ETH 崩盘之后,此类游戏暂时已经没有市场了,因为本质上来说,它们都属于庞氏骗局,在研究相关代码后,让我对利滚利公式产生了一点兴趣,其实很简单,但我年纪大了,实实在在推导了好几遍才搞定,索性把推导过程记录下来。

比如有一个资金盘游戏,开始你投入 10000 块钱,然后每天我给你返利 1%,返利
...

老王 2018-12-31 22:45 | 查看: 1771

以太坊地址区分大小写么

以太坊地址区分大小写么?要搞清楚这个问题,我们不妨先在私链上做个实验:

geth> eth.sendTransaction({
from: eth.accounts[0],
to: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
value: web3.toWei(1, 'ether')
})

geth> eth.
...

老王 2018-11-29 21:32 | 查看: 2452

关于以太坊随机数

在以太坊应用中,游戏一直都是热点中的热点,而在游戏中,随机数往往是一个不可或缺的功能,比如骰子游戏中,我们需要通过随机数来控制点数,如果一个游戏有一个好的随机数算法的话,那么既可以保证游戏庄家不被黑,也可以保证玩家不被宰。

虽然随机数很重要,但是坏消息是在以太坊中实现一个基本的随机数并不是一件简单的事情。对于不熟悉区块链的人而言,这可能有些难以理解:毕竟大多数编程语言都有生成随机数的功能,难道以
...

老王 2018-10-31 19:12 | 查看: 2349

如何解密keystore文件

如果你用 geth 创建过账号「geth –datadir /path/to/data account new」,那么多半知道 keystore 文件,它通过一个 password 加密保存着账号的私钥:

keystore

如果我想拿到加密前的私钥怎么办?最容易想到的办法是在 MetaMask 中导入账号的时候选择通过 JSON 文件导入的方式,然后再导出私钥。不过这个方法不方便,
...

老王 2018-09-26 21:23 | 查看: 1850

如何实现一个定制的智能合约地址

我学习智能合约的一个主要途径就是在 DappRadar 看各个热门应用的源代码,前些天我在看  dice2win 的时候发现一个有趣的现象:虽然它自从上线以来已经多次部署过智能合约,不过让人好奇的是这些地址有一个特点,都有一个和名字很像的 「D1CE」前缀(因为的地址是十六进制的,所以字母 I 被改为了数字 1)。

如何实现呢,其实 ethereum 源代码里已经给出答案:

func Crea
...

老王 2018-09-24 10:13 | 查看: 3137

搭建以太坊智能合约测试环境

早就想学习区块链相关技术了,可惜因为懒惰一直没有付诸实践,最近随着诸如 God.Game,Fomo3D 等区块链游戏接连暴出安全漏洞,让我对智能合约的兴趣愈发强烈起来,于是利用周末搭建以太坊智能合约测试环境,原想应该很简单,实际却花了不少精力,记录一下以飨读者。

既然要搭建以太坊智能合约测试环境,那么至少得安装一个合适的以太坊客户端,比如:命令行的 Geth,Parity,或者图形界面的 Mis
...

老王 2018-08-26 23:56 | 查看: 2660

通过ProxySQL提升PHP/MySQL的性能

前些天我介绍了如何通过 Twemproxy 实现 Redis 连接池,进而提升 PHP/Redis 的性能。今天我要介绍一下 ProxySQL,通过它可以实现 MySQL 连接池,进而提升 PHP/MySQL 的性能,实际上原理是差不多的,本来没必要再写一篇文章赘述,不过我在配置使用 ProxySQL 的过程中,遇到了一些小问题,感觉还是应该记录一下。

关于安装过程,官方 Wiki 里有详细描述
...

老王 2018-07-09 19:35 | 查看: 1509

通过Twemproxy提升PHP/Redis的性能

Twemproxy 可以说是最古老的 Redis 代理软件了,一般来说,引入代理后性能会比没有引入代理时低一些,毕竟代理会导致一些额外的性能损耗,可是 Twemproxy 却会提升性能, 这主要得益于它的 Pipelining 功能可以实现打包请求,简单点说:当代理收到多个并发请求时,它会把这些请求打包成一个请求发送给后端服务器,从而减少不必要的 RTT。关于 Pipelining 本文不做过多讨
...

老王 2018-06-23 21:15 | 查看: 1786

几个用于诊断HTTP响应时间情况的小工具

如果有人说你的 HTTP 接口响应慢,那可能是他的电脑慢,也可能是网络本身慢,还可能是你的服务器慢,总之想搞清楚到底是哪里慢并不是一件简单的事情,好在有一些小工具可以帮你快速做出正确的判断。

Chrome DevTools:

打开开发者工具,在 Network 一栏里就能看到时间在各个阶段的分布:

Chrome Timing

关于各个阶段的说明,可以参考:Timing breakdown
...

老王 2018-05-29 18:31 | 查看: 2145

如何编码事务

我说的事务指的是一般的数据库事务,而不是什么分布式事务之类高大上的概念。听起来很简单,但是即便如此,想实现的优雅一点也不是一件容易的事情。 

假设有一个 QA 系统,当用户在上面提问的时候,系统保存问题,然后更新用户的提问数,最后触发一个问题已经被创建的异步事件来解耦逻辑(代码均使用 Lumen 框架):

<?php

try {
DB::beginTransaction();
...

老王 2018-04-24 16:55 | 查看: 3519

...更多...