免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6267 | 回复: 10
打印 上一主题 下一主题

请教feersum的事件怎么写?(已解决) [复制链接]

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-08 18:49 |只看该作者 |倒序浏览
本帖最后由 laputa73 于 2014-05-09 14:58 编辑

比如类似mojo的延迟渲染
这样写怎么不行呢?
  1. sub {
  2.     my $r = shift;

  3.     # loading the env is optional under Feersum.  For a "fair" speed
  4.     # comparison to app.psgi, uncomment this line:
  5.     my $env = $r->env();

  6.     my $w = $r->start_streaming("200 OK", [
  7.         'Content-Type' => 'text/plain',
  8.         'Connection' => 'close',
  9.     ]);
  10.   $w->write("hello");
  11.   EV::timer 1, 0, sub {
  12.      $w->write("$env->{REMOTE_ADDR}");
  13.      $w->write("\n");
  14.     $w->close();
  15.    };


  16. };
复制代码

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
2 [报告]
发表于 2014-05-09 15:02 |只看该作者
参考feersum的chat.feersum例子,这个基本可以了.
需要把handle和timer定义为全局变量.
feersum的文档好少啊.
  1. #!perl
  2. use warnings;
  3. use strict;


  4. use EV;
  5. use Scalar::Util qw/weaken/;


  6. my $clients = 0;
  7. my @handles;
  8. my @timers;

  9. my @html_hdrs = (
  10.     'Content-Type' => 'text/html; charset=UTF-8',
  11.     'Cache-Control' => 'no-cache, no-store, private',
  12.     'Pragma' => 'no-cache',
  13. );





  14. sub start_stream {
  15.     my ($r, $client) = @_;
  16.     my $w = $r->start_streaming(200, \@html_hdrs);
  17.     $handles[$client] = $w;
  18.     weaken $w;
  19.     $timers[$client] = EV::timer 1,1,sub {
  20.         eval{
  21.         $w->write(' keep-alive') if $w;
  22.         }
  23.         if($@) {
  24.           $w->close;
  25.           undef $timers[$client];
  26.                                 }
  27.     };
  28.     $w->write(<<EOH);
  29. <html>
  30. <head></head>
  31. <body>
  32. <p>Hello! (connection $client.)</p>
  33. EOH
  34. }


  35. my $app = sub {
  36.     my $r = shift;
  37.     my $env = $r->env;
  38.     my $path = $env->{PATH_INFO};
  39.     $clients++;
  40.    
  41.         start_stream($r,$clients);

  42. };
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2014-05-09 15:05 |只看该作者
我以前只试过feersum

假设你的回调是传给request_handler的,你这里timer注册的事件不能这么写。见SYNOPSIS:http://search.cpan.org/~audreyt/Feersum-1.401/lib/Feersum.pm

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
4 [报告]
发表于 2014-05-09 18:02 |只看该作者
回复 3# py


就是feersum的.
feersum可以用psgi,也可以用native mode,还可以写成pl.
就是文档太少,例子也只有几个.
2楼的写法是按照例子写的

feersum的性能确实好.
但是怎么用还需要摸索

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
5 [报告]
发表于 2014-05-09 18:11 |只看该作者
本帖最后由 laputa73 于 2014-05-09 18:17 编辑

psgi方式的.
还是没搞明白poll_cb这个是怎么调用的.再读读源码吧.
  1. use EV;
  2. use Scalar::Util qw/weaken/;

  3. my $client = 0;
  4. my @handles;
  5. my @timers;

  6.    
  7.    my @html_hdrs = (
  8.     'Content-Type' => 'text/html; charset=UTF-8',
  9.     'Cache-Control' => 'no-cache, no-store, private',
  10.     'Pragma' => 'no-cache',
  11. );

  12.    
  13.    my $app = sub {
  14.         my $env = shift;
  15.          $client++;
  16.         return sub {
  17.             my $respond = shift;
  18.             my $w = $respond->([
  19.                 200, \@html_hdrs
  20.             ]);
  21.                         $handles[$client] = $w;
  22.                     weaken $w;
  23.                     $timers[$client] = EV::timer 1,1,sub {
  24.                         eval{
  25.                         $w->write(' keep-alive') if $w;
  26.                         };
  27.                         if($@) {
  28.                           eval{$w->close;};
  29.                           undef $timers[$client];
  30.                                                 }
  31.                     };
  32.     $w->write(<<EOH);
  33. <html>
  34. <head></head>
  35. <body>
  36. <p>Hello! (connection $client.)</p>
  37. EOH
  38.         };
  39.     };
复制代码

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
6 [报告]
发表于 2014-05-09 18:23 |只看该作者
配合coro的
  1. use Coro;
  2. use AnyEvent;
  3. use Coro::AnyEvent;
  4. use Scalar::Util qw/weaken/;

  5. my $client = 0;


  6.    
  7.    my @html_hdrs = (
  8.     'Content-Type' => 'text/html; charset=UTF-8',
  9.     'Cache-Control' => 'no-cache, no-store, private',
  10.     'Pragma' => 'no-cache',
  11. );

  12.    
  13.    my $app = sub {
  14.         my $env = shift;
  15.          $client++;
  16.         return sub {
  17.             my $respond = shift;
  18.             my $w = $respond->([
  19.                 200, \@html_hdrs
  20.             ]);
  21.                         $handles[$client] = $w;
  22.                     weaken $w;
  23.                     
  24.    $w->write(<<EOH);
  25. <html>
  26. <head></head>
  27. <body>
  28. <p>Hello! (connection $client.)</p>
  29. EOH

  30.                     
  31.                      Coro::AnyEvent::sleep 2;       
  32.                         eval{
  33.                         $w->write(' keep-alive') if $w;
  34.                         };
  35.                          eval{$w->close;};
  36.         };
  37.     };
复制代码

论坛徽章:
0
7 [报告]
发表于 2014-07-21 14:06 |只看该作者
回复 5# laputa73

请问poll_cb看懂了吗?看懂了的话,请指教,哈哈
   

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
8 [报告]
发表于 2014-07-23 16:10 |只看该作者
回复 7# hotsnow


    不好意思,有一阵没看了.
    后来不用poll_cb了,反正文档说poll_cb is removed from the preliminary PSGI 1.1 spec
    我想要的效果就是可以在feersumsum的app里面使用EV或者AE或者coro的异步事件
   这个在native和psgi都可以实现,后续没在继续深入.

论坛徽章:
0
9 [报告]
发表于 2014-07-25 14:50 |只看该作者
回复 8# laputa73
  1. my $app = sub {
  2.     my $req = shift;
  3.     my $env = $req->env();

  4.     my $w = $req->start_streaming(200, []);
  5.    
  6.     Coro::AnyEvent::sleep 2;
  7.    
  8.     $w->write("regular scalars are OK too\n");
  9.     $w->close(); # close off the stream
  10. };
复制代码
native 模式下这个异步会报错,你的native模式是怎么用的?

(in cleanup) DIED: Can't call method "env" on unblessed reference

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
10 [报告]
发表于 2014-07-25 18:09 |只看该作者
本帖最后由 laputa73 于 2014-07-25 18:29 编辑

回复 9# hotsnow


    你启动的时候加 --native了么?
feersum --native ./tsleep.feersum


[root@search2 perl]# feersum  -help
Usage:
      feersum [plackup opts] [--pre-fork=N] [app.psgi]
      feersum --native [--listen host:port] [--pre-fork=N] [app.feersum]

[root@search2 perl]#
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP