首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mojolicious使用

Mojolicious使用
EN

Stack Overflow用户
提问于 2013-06-25 04:21:30
回答 1查看 1.2K关注 0票数 2

根据下面的代码,我如何从Fu::Bar::dosomething中通过为'/wsinit‘打开的websocket向客户端发送消息?

代码语言:javascript
复制
package Fu;
use Mojo::Base 'Mojolicious';

sub startup
{
    my $r = shift->routes;

    $r->get('/')->to(controller => 'bar', action => 'init');

    $r->websocket('/wsinit')->to(controller => 'bar', action => 'wsinit');

    $r->get('/dosomething')->to(controller => 'bar', action => 'dosomething');
}

1;

# -- ^L
# -- 

package Fu::Bar;
use Mojo::Base 'Mojolicious::Controller';

sub init
{
    my $self = shift;
    $self->render(text => 'init');
}
sub wsinit
{
    my $self = shift;
    $self->app->log->debug( 'Websocket opened.' );
    $self->send({json => {fu => 'bar'}});
}
sub dosomething
{
    my $self = shift;
}

1;

请忽略以下多余的措辞,其目的是满足stackoverflow的详细信息/代码要求,这些要求目前正阻止我发布我的问题。

EN

回答 1

Stack Overflow用户

发布于 2013-06-26 09:19:54

您需要在client-side code中通过javascript连接到websocket。一旦建立了连接,您拥有的代码看起来应该可以发送到客户端。

代码语言:javascript
复制
#!/usr/bin/env perl

use Mojolicious::Lite;

any '/' => 'index';

websocket '/ws' => sub {
  my $c = shift;
  $c->send({ json => { foo => 'bar' } });
};

app->start;

__DATA__

@@ index.html.ep

<!DOCTYPE html>
<html>
<head>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
</head>
<body>
  <p id="result"></p>
  %= javascript begin
    var ws = new WebSocket('<%= url_for('ws')->to_abs %>');
    ws.onmessage = function (e) {
      $('#result').text(e.data)
    };
  % end
</body>
</html>

如果问题是关于dosomething方法,我不理解这个问题。将其作为操作中的方法调用,或者将其作为其他路由的操作进行连接。如果这不能回答问题,请澄清您的请求工作流程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17284382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档