137-rick / dora-rpc Goto Github PK
View Code? Open in Web Editor NEWDoraRPC is an RPC For the PHP MicroService by The Swoole
DoraRPC is an RPC For the PHP MicroService by The Swoole
Notice: Undefined property: APIServer::$server in /mnt/winshare/test/myswoole/Dora-RPC-master/src/BackEndServer.php on line 249
Call Stack:
0.0059 235664 1. {main}() /mnt/winshare/test/myswoole/Dora-RPC-master/test/demoserver.php:0
0.0239 531832 2. DoraRPC\BackEndServer->start() /mnt/winshare/test/myswoole/Dora-RPC-master/test/demoserver.php:85
0.0244 540032 3. Swoole\Http\Server->start() /mnt/winshare/test/myswoole/Dora-RPC-master/src/BackEndServer.php:208
14.5473 554160 4. DoraRPC\BackEndServer::onRequest(class Swoole\Http\Request, class Swoole\Http\Response) /mnt/winshare/test/myswoole/Dora-RPC-master/src/BackEndServer.php:0
Fatal error: Call to a member function task() on null in /mnt/winshare/test/myswoole/Dora-RPC-master/src/BackEndServer.php on line 249
Call Stack:
0.0059 235664 1. {main}() /mnt/winshare/test/myswoole/Dora-RPC-master/test/demoserver.php:0
0.0239 531832 2. DoraRPC\BackEndServer->start() /mnt/winshare/test/myswoole/Dora-RPC-master/test/demoserver.php:85
0.0244 540032 3. Swoole\Http\Server->start() /mnt/winshare/test/myswoole/Dora-RPC-master/src/BackEndServer.php:208
14.5473 554160 4. DoraRPC\BackEndServer::onRequest(class Swoole\Http\Request, class Swoole\Http\Response) /mnt/winshare/test/myswoole/Dora-RPC-master/src/BackEndServer.php:0
希望兼容高版本的swoole。
未来计划增加
增加失败转移功能(中间件服务器?)
增加远程管理功能(应用服务器重启,reload等)
增加插件管理应用服务器功能
Found Report Config... Start Report Process
[2016-06-19 10:29:35 @1645.0] ERROR swSocket_set_buffer_size(:313): setsockopt(4, SOL_SOCKET, SO_SNDBUF, 0) failed. Error: Invalid argument[22].
[2016-06-19 10:29:35 @1645.0] ERROR swSocket_set_buffer_size(:313): setsockopt(5, SOL_SOCKET, SO_SNDBUF, 0) failed. Error: Invalid argument[22]
在客户端程序启动的时候,下发一批要异步处理的任务,并获取到他们对应的token
当应用服务器获取到任务后执行完毕,将结果以token+ip+端口放到redis内
客户端在处理完所有事宜后,去redis用token拿到本次所有调用结果
比如:
php server.php start -d -h 127.0.0.1 -p 9567 -w 4 -r 20 -t 20
-d, --deamon 启用守护进程模式
-h, --host [<value>] 指定监听地址
-p, --port [<value>] 指定监听端口
--help 显示帮助界面
-w, --worker [<value>] 设置Worker进程的数量
-r, --thread [<value>] 设Reactor进程的数量
-t, --takser [<value>] 设置Task进程的数量
php server.php reload 重新加载
php server.php stop 停止服务
同时建议master进程名中显示启动参数
包头将会做改进,留在这里做记录
将会对包信息配置指定是否签名验证
将会在RPC代码内先手动修正,待新版本升级后去掉
如果rpc是阻塞的,那么在等待rpc返回的这段时间里php进程就没有别的事可做就进程饥饿,就很难支持大qps了。。。就算使用的异步的httpclient如果有一个wait的过程那还是有进程饥饿,dora用的是swoole1。x版本吧,这个问题是如果解决的呢?
BackEndServer.php line:350 括号闭合的位置错了:count($requestInfo["api"] == 0)
if (!is_array($requestInfo["api"]) && count($requestInfo["api"] == 0)) {
...
目前只是unset当前连接,然后重试,随机一个服务器(有几率还是这个连接),因此建议把当前连接设置进黑名单。
至于黑名单满了,会被重新清空,所以不需要担心无连接可取的问题。
还有个小问题,随机取config可能会重复好几次(运气不好的话)
如果在同一个程序中创建两个客户端,分别连接不同的服务器,比如:
第一个客户端连接 127.0.0.1:3000, 第二个客户端连接 127.0.0.1:3001,因为共用同一个 swoole_client,会造成冲突,无法使用。
代码写的很工整,注释也比较清楚,赞一个!这里提几点建议,仅供参考~
1、虽然很容易看懂,也有例子,但最好再详细介绍一下,比如协议设定,使用方法。
2、服务端需要在初始化的时候载入类库,例子中没有说明。
3、最好采用配置文件的方式,而不是每次去修改类。
4、服务端可以引入控制层,可以启动服务,也可以关闭服务,便于管理。
5、从抽象的角度,应该可以适配更多的协议。
6、可以参考psr-4规范,引入命名空间,自动载入。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.