TA的收藏

2016-10-09 17:26:50 浏览(23729) 赞(0)
2016-09-24 14:59:08 浏览(44093) 赞(25)

TA的提问

1
回答

在Swoole中 Reactor、Worker、Task的关系是如何分工的?

查看详情
2016-12-12 15:33:06 浏览(710)
1
回答
<div ng-include="views/user/show.html"></div> 错在哪里?
查看详情
2016-03-09 06:03:56 浏览(762)
1
回答

angular.module的两种写法:含义大不同

查看详情
2016-03-09 06:03:16 浏览(750)
2
回答

有哪些安全问题需要注意?

查看详情
2015-11-28 07:11:58 浏览(2554)

TA的回答

2
赞同

如果你这么写过,会发现这个位置啥也没有加载出来,那么,错在哪里呢?错在ng-include需要的是一个变量,如果你在$scope中有这样一个变量 $scope.userShowTemplateUrl = "views/users/show.html",并且把上面这句变为就能正常工作了。或者这样写也行: 原因何在? 因为在ng-include中,是把它的参数当做变量来解释的,它会通过$eval对传入的值进行计算,然后作为模板地址去加载。

查看详情
2016-03-09 06:03:10 回复(0)
2
赞同

angular.module('name', [])是创建一个新的module,[]表示它没有依赖任何其他模块,如果已经有了一个同名模块,则会覆盖现有的。 而angular.module('name')是查找一个现有module,如果这个module不存在,则返回空值。 如果把带方括号的形式(创建)误用为不带方括号的形式(引用),那么在它的返回值上调用controller等函数会出现空指针错误。 而如果把引用形式误用为创建形式,则会导致难以理解的“对象不存在”错误,但是你却明明定义过那个service或者controller等对象!这种问题就是因为后面的模块定义覆盖了以前的模块定义,你定义过的那些对象都被随着以前的module而丢掉了!

查看详情
2016-03-09 06:03:27 回复(0)
0
赞同

Reactor、Worker、Task三种角色分别的职责是:

Reactor线程

  • 负责维护客户端机器的TCP连接、处理网络IO、收发数据
  • 完全是异步非阻塞的模式
  • 全部为C代码,除Start/Shudown事件回调外,不执行任何PHP代码
  • 将TCP客户端发来的数据缓冲、拼接、拆分成完整的一个请求数据包
  • Reactor以多线程的方式运行

Worker进程

  • 接受由Reactor线程投递的请求数据包,并执行PHP回调函数处理数据
  • 生成响应数据并发给Reactor线程,由Reactor线程发送给TCP客户端
  • 可以是异步非阻塞模式,也可以是同步阻塞模式
  • Worker以多进程的方式运行

Task进程

  • 接受由Worker进程通过swoole_server->task/taskwait方法投递的任务
  • 处理任务,并将结果数据返回给Worker进程
  • 完全是同步阻塞模式
  • Task以多进程的方式运行

关系

可以理解为reactor就是nginx,worker就是php-fpm。reactor线程异步并行地处理网络请求,然后再转发给worker进程中去处理。reactor和worker间通过IPC方式通信。swoole的reactor,worker,task_worker之间可以紧密的结合起来,提供更高级的使用方式。一个更通俗的比喻,假设Server就是一个工厂,那reactor就是销售,帮你接项目订单。而worker就是工人,当销售接到订单后,worker去工作生产出客户要的东西。而task_worker可以理解为行政人员,可以帮助worker干些杂事,让worker专心工作。

底层会为Worker进程、Task进程分配一个唯一的ID 不同的task/worker进程之间可以通过sendMessage接口进行通信

查看详情
2016-12-12 15:34:33 回复(0)
二维码
建议反馈
二维码