Jump to Navigation

Welcome!

  NullGet是使用Qt编写的,运行于多种平台的GUI界面的多线程多协议断点续传下载软件。  使用NullGet可以轻松下载网络的多种协议的数据流,加快下载速度,支持断点续传,目前支持的协议有:HTTP,HTTPS,FTP,MMS,RTSP。而且它能运行于当前大多数流行的操作系统,包括Windows,Linux,FreeBSD等。     下载NullGet

  NullFXP 是一个基于Qt 4 开发的SFTP/FTP 客户端软件。目前已经实现基本的多文件上下传功能。详细信息查看本站项目说明页面。     下载nullfxp

  我们的目标是打造一个开源的,跨平台的,多线程的,运行稳定的下载软件,另一个就是整理Qt库开发跨平台GUI应用程序的相关资料。欢迎各位朋友对本站开源项目提供意见及建议,欢迎有兴趣的朋友参与本站开源项目,请联系 drswinghead at gmail dot com

一种PHP实现grpc协议调用grpc服务的方案

一种PHP实现grpc协议调用grpc服务的方案

原由

在前面的文章中,曾经提到grpc对PHP语言的支持情况。

主要是因为php-grpc的支持实现不完善,有明显的bug,支持落后于其他主要的开发语言。

从这个方向上考虑,如果要解决的话,需要完善php-grpc扩展,修复bug等,工作量可能比较大。

这段时间考虑到了一种临时替代方案,以解决在PHP中实现grpc协议调用服务的需求。

把使用go语言实现的客户端转换为PHP能调用的动态库

grpc对go语言的支持还是非常完善的,如果能够利用go的实现来支持PHP就好了。

刚开始只是考虑了一下,经过一些查找测试,发现这种方式真的是可行的,实际上已经有人实践过了。

最主要的是,这种方式还是go官方提供的,非常支持的方式,因为go语言有志于替代使用C/C++这类语言开发动态共享链接库。

这个实现方案的机制描述如下,

用rust语言实现C++的方法重载,overload

用rust语言实现C++的方法重载,overload

C++的重载方法,指的是方法名字相同,参数不同的一功能相似的方法。

一种重载是参数类型或者个数不同,但是返回值类型相同。 一种重载是参数类型或者个数不同,而且返回值类型也不同。

由于在rust语言中表达这两种方式有差别,所以区分开描述。

第一种情况,

假设C++类有如下方法,

class QString;

QString & QString::append(const QString & str); QString & QString::append(QChar ch);

这种代码在C++毫无违和感,语言级就支持,还比较好。

那么在rust实现同名的方法,显然不行的。

struct QString{};

protoc-gen-go代码生成器的扩展

protoc-gen-go代码生成器的扩展

protobuf中的protoc命令简介

protobuf提供了描述格式标准,以及对应的格式解析工具及代码生成工具protoc。

由于protobuf支持众多不同编程语言,protoc被设计为插件式的程序,能够调用不同的插件,为.proto文件生成不同语言的执行框架代码。

go语言的protobuf实现

项目地址:https://github.com/golang/protobuf

目录结构:

gRPC服务注册的建议

gRPC服务注册的建议

注册信息服务器

使用分布式配置服务etcd,解决配置信息的分布式存储与一致性保证。

服务的端口

建议尽量使用动态的服务端口,节省服务端口的配置的工作。

比如,给一个端口的范围,[5000,6000],服务启动时选择一个可用的端口并监听服务。

由于服务端口总是需要注册到etcd的,所以,手工指定配置的端口和动态选择的端口没有区别。

当然,初期可以不用实现的这么复杂,建议在程序中指定某个固定的服务端口。

心跳方式注册

为了能够保证etcd中存储的API信息的有效性,建议实现心跳机制定时刷新API的注册信息。

根据看到的一些说明,建议心跳时间在,10-30秒,初步使用20秒的心跳值。

并且,在心跳时刷新时,尽量能够根据实际服务运行状态。对于服务不响应的情况,也就不需要注册。

注册到etcd的API信息

存储在etcd中的key信息:

建议格式: /dorpc/service_name/version/

其中,dorpc为固定标识,该key下是一些gRPC服务API信息。

gRPC对PHP的支持情况说明

gRPC对PHP的支持情况说明

gRPC设计能够支持大多数常用编程语言,PHP也不例外。

不过由于gRPC对不同语言的支持力度不一样,有些语言支持的非常完善,

而有些语言支持的不够完善,甚至达不到能够使用程度。

很不幸的是PHP语言正是支持力度非常靠后的一种语言。

gRPC包括客户端部分和服务端部分,对不同的语言也同时分为这两个部分。

以前从这两个部分说明gRPC的 PHP支持情况,软件包使用的是各包最新的有版本号的beta状态的包。

(也许还可以完全部使用仓库的HEAD版本进行测试,结果也许有所不同,后续有测试之后补上。)

基础依赖包

  • gRPC C实现包和运行库
  • protobuf实现包和运行库
  • PHP-5.5+

对PHP客户端的支持

客户端的支持,需要几个模块的配合使用,

Go调用gRPC服务两例

Go调用gRPC服务两例

先上两段Go语言客户端调用gRPC服务的示例代码:

GO运行时环境变量

GO运行时环境变量

介绍

Go运行时,是除了普通用途的垃圾回收,goroutine调度,计时器,网络poll功能外,开启额外的调试输出,

或者改变运行时本身行为的工具。

这些工具是通过传递给go程序的环境变量控制的。本篇文档描述了运行时支持的4个主要环境变量的功能。

这4个主要环境变量是,GOGC,GOTRACEBACK,GOMAXPROCS, GODEBUG。

GOGC

GOGC是Go运行时支持的最老的环境变量之一。它甚至比GOROOT还老,但却不广为人知。

GOGC控制垃圾回收的不良影响。其默认值为100,表达的含义是垃圾收集器直到达到上次收集的100%时才会被触发。

简单来说,默认情况下垃圾回收会在每次堆使用翻倍执行。

如果设置为更大的值,如GOGC=200,将会推迟垃圾回收直到堆增涨到前一次的200%。

如果设置为更小的值,如GOGC=20,意味着垃圾回收会更频繁的执行,并且在每次触发回收前能够分配的数据越来越少。

设置GOGC=off将会完全关闭垃圾回收。

ExQuilla的使用和破解-转

首先是使用ExQuilla这个插件,步骤如下:
1、Tools => Add-ons => 搜索 “exchange”
2、安装 “ExQuilla”
3、Tools => 启动”ExQuilla for Microsoft Exchange” => “Add Microsoft Exchange account”
4、填写邮箱地址和密码, 其他默认, 然后下一步
5、直接点 “do auto discover”, 出现两个绿色的小原点就代表一切OK, 然后下一步,直到完成。

从头到尾只需要填写邮箱和密码即可,其他默认

关于exquilla的破解,下面几步,应该就可以了。
为什么是用下面的格式,可以参照这个连接:http://blog.ssfighter.com/2015/01/exquilla-31-0-crack/

Category:

cargo的依赖处理

cargo的依赖处理,

三种依赖配置方式:

[dependencies]
depend-pkg-name="pkg-version or *"
depend-pkg-name={git = "git repo", rev = "bfabc843ef2"}
depend-pkg-name={path = "./helloutils"}   #支持绝对路径,相对路径。

一些释疑

在编译时,cargo首先从https://github.com/rust-lang/crates.io-index下载官方所有crate的索引列表。

crate索引crates.io-index大小达到31M,估计以后还会变得更大。

下载依赖包的过程是递归的。

索引列表放在什么位置呢?~/.cargo。

如何指定本地某一目录下的crate呢?$CARGO_HOME,设置该变量后,~/.cargo位置被覆盖了。

本地搜索一个crate的机制,从该项目目录开始,逐级向上查找带.cargo目录的位置。

上否支持多个$CARGO_HOME路径呢?

python字符串转hex

python字符串与hex转换,还挺麻烦的,而且发现不同版本还处理方式不一样。

找了段适用python 2.6-3.5的转换代码,可以容易在任何项目中使用了,

Pages

Subscribe to www.qtchina.tk RSS


Main menu 2

by Dr. Radut