Jump to Navigation

WEB

WEB/PHP开发

笔记软件https协议逆向汇总

笔记软件https协议逆向汇总

为啥现在就记录未完成的工作

从现在看,预期工期特别长,先记录,再继续后续工作。

起因

最近使用evernote,更新到6.6发现不能正常同步笔记。

然后突然想自己做的笔记软件,就不会出现这种问题了。

但是,毕竟对GUI客户端开发也不熟悉,遇到UI的开发还是很头痛的。

而且如果一个笔记软件的GUI客户端做的不顺手,那是没法用的,达不到随手快速记录的目的,也就没有什么意义。这个想法基本放弃了。

后来,想起来为知笔记客户端有个开源版本,考虑着也许可以在这个开源客户端基础改一个自己的版本出来,配合自己的笔记服务端使用。

这个想法看起来不错,然后动手改为知笔记开源客户端源代码中的HTTP API 地址,用go语言的martini+xorm写了个模拟的笔记server端(当然只是个壳子),发现可行。然后从代码和试验中实现了一些为知的API模拟版本,基本实现的笔记创建,修改,删除,以及附件的功能,功能上后面再说。

grpc与http2的关系

grpc与http2的关系

grpc client 发送包到原生的http2 server

client收到报错:

panic: rpc error: code = 9 desc = transport: received the unexpected content-type "text/html; charset=UTF-8"

server端输出:

输出正常,包括了http2的所有信息,默认情况下响应了404。

etcd vs consul vs zookeeper 简单对比

etcd vs consul vs zookeeper 简单对比

这是目前在分布式一致性方面非常优秀的项目。

zookeeper:

使用posix协议,功能全面,但开发与维护复杂。采用java编写。

  • k/v存储,
  • 服务协调API,
  • 锁,
  • ephemeral Node
  • API,私有协议,语言绑定包括java/c/python,常用语言有,但并不容易添加新的语言封装。
  • 效率 W: 200/秒,R: 2000/秒
  • 协调规模:

可在此基础上实现: 服务注册,监控

consul:

使用raft 协议,功能全面,自带服务注册机制,开发简单,维护中等复杂程序。采用golang编写。

  • k/v存储,
  • 锁,
  • 服务注册,监控,
  • API采用HTTP REST
  • 效率 W: ?/秒,R: ?/秒
  • 协调规模:

可在此基础上实现: 服务协调API

开发支持election选主集群项目的几种不同实现方式

开发支持election选主集群项目的几种不同实现方式

election选主目前应用日趋广泛,但其算法复杂相对复杂,自已实现需要经历大量测试保证选举算法的正确与集群的稳定。

常用的选主算法有paxos, raft等。分别对应实现 zookeeper,etcd。

另外还有几个项目的实现了election选主并提供了相应的API,后面根据研究进展不断补充。

基于 etcd v2 版本实现,较通用的实现

这其实是一种依赖全局锁的实现方式,其实现的可靠性依赖与全局锁的实现。

比如,使用redis也可以实现这种,但是由于redis的非一致性集群特性,可能在极端情况下产生错误的状态。(虽然实际上redis很稳定)

unfair version

步骤,

1、以原子方式检查key不存在并且添加一个key。

2、如果操作成功能,则成为leader。

3、如果操作不成功,则watch该key的变化,过期或者被删除后再次执行leader选举功能。

PHP扩展动态回调函数的实现

PHP扩展动态回调函数的实现 PHP扩展回调函数中获取当前类/方法/函数

获取当前的执行状态,是语言的一种自省能力。对于编译动态灵活的代码非常有帮助。

一般在实现PHP扩展的时候,采用的是指定固定的扩展函数的对应C函数名的方式。

这种静态指定的方式,虽然对使用C语言简化编写扩展PHP扩展有所帮助,

但对于要求更高动态实现扩展回调函数的场景,则不是一种非常好的方式,

而应该是能够动态灵活的指定回调的C函数,甚至是运行时的切换。

如果希望能够灵活地实现回调扩展函数/方法,一个需求就是能够动态获取PHP解释器当前的执行状态,包括类名、方法名、参数名信息。

本文从动态灵活的需求,分析并总结常用模式的指定回调C函数指针,以及动态指定回调C函数指针的两种不同的实现方式。

常用指定扩展C函数方式

声明C扩展函数:

etcd客户端版本说明

前言

在用etcd客户端的时候,发现找到了几个实现,有点混乱。

简单整理一下,供使用参考,希望正确选择使用etcd客户端实现。

v0版本

支持etcd版本:v0.4-

实现方式:net/http包。

状态:已弃用

v1版本

地址:https://github.com/coreos/go-etcd

支持etcd版本:etcd-v2.0+

实现方式:net/http包。

状态:已弃用

v2版本

地址:https://github.com/coreos/etcd/client

支持etcd 版本:etcd-v2.0+

实现方式:net/http包

状态:正式版

v3版本

地址:https://github.com/coreos/etcd/clientv3

支持etcd 版本:etcd-v3.0+

实现方式:gRPC-go包

状态:正式版

从.proto扩展到API发布:Big Plus

从.proto扩展到API发布:Big Plus

从.proto描述到API发布与发现

从.proto文件到API发布与发现

关键词

  • protobuf
  • gRPC
  • 客户端
  • 服务端
  • 注册中心,registry
  • 注册器,register
  • 发现,discovery
  • 发布,publisher
  • 服务化,service
  • 服务端发现代理
  • 服务端注册代理,这两个来进一步简化客户端与服务端的使用。

概述

上节提到的大多数关键词,已经出现在前面几篇文章当中,在此不再重述。

本文将从.proto API描述文件开始,逐步展开形成一个完整系统。

.proto文件作为简单的API描述语言,能够依赖其提供的相关工作,生成不同语言的API实现封装代码,很大程度上实现了自动化工作,减少接下来的编码工作,从很多角度来说是个不错的开始。

GO1.6 cgo使用上的改变

GO1.6 cgo使用上的改变

在新go1.6版本中,针对cgo的指针使用制定了规范,并且体现在了编译器中。
在不规范使用cgo指针的时候,程序将报错退出。

例如,在go1.5中,可以编译返回unsafe.Pointer类型的go导出函数。

GO语言学习资料

GO语言学习资料

https://golang.org/

http://golang-china.github.io/gopl-zh/

http://gopl.io/

http://godoc.golangtc.com/pkg/

源码剖析 https://github.com/qyuhen/book

https://tracymacding.gitbooks.io/implementation-of-golang/content/index.html

项目:https://github.com/avelino/awesome-go

Category:

用golang实现PHP扩展

用golang实现PHP扩展

一种方式,完全在一个项目中实现

一种方式,在两个分开的项目中实现

技术要点,

  • 需要用PHP调用golang实现的函数。
  • 需要用golang调用PHP写的函数。

在一个项目中实现

项目完整性比较好,一个项目代码就直接能够生成PHP需要的.so扩展。

当然不好的地方也有,就是go编写的功能代码部分不方便在其他项目中重用。

所以具体使用哪个方式,看go编写的功能代码是否需要在其他的项目重用。

在分开的项目中实现

分开的两部分分别是,php扩展部分,go共享库部分。

至于为什么还是需要一个php扩展部分,是因为即使用go写功能代码,仍旧需要使用C编写桥接代码。

抛出go函数

编写go代码与其他go代码并没有什么不同。

在写完go代码的基础上, 为要在.so共享库中抛出的函数加一行指令,

页面

订阅 RSS - WEB


Main menu 2

by Dr. Radut