小编Mar*_*hli的帖子

从Socket解析ByteString失败

我们正在Haskell (HMB)中编写消息代理.因此,在从socket(Network.Socket)接收消息后,必须解析消息(Data.Binary).到目前为止,我们一直在测试环回(localhost) - 用于生成和解析消息.这很安静.如果我们通过从另一台机器生成消息进行基准测试,那么我们就会遇到问题:突然,解析器没有足够的字节来解析.

每个消息的前4个字节定义消息的长度,从而描述要解析的消息.如上所述,我们使用Data.Binary进行解析 - 所以这是懒惰的.出于测试目的,我们使用谷物库将前4个字节的解析切换为严格.这同样的问题.我们现在甚至试图用谷物完全解析请求,问题也仍然存在.

在代码中,您将看到我们进行线程化.但是,我们也尝试了没有通道(单线程设置),但这也没有解决问题.

下面是代码(Thread1)的一部分,其中接收的字节被写入要进一步使用/解析的通道.(如前所述,如果省略通道并直接解析输入,则没有任何变化):

runConnection :: (Socket, SockAddr) -> RequestChan -> Bool -> IO()
runConnection conn chan False = return ()
runConnection conn chan True = do
    r <- recvFromSock conn
    case (r) of
        Left e -> do
            handleSocketError conn e
            runConnection conn chan False
        Right input -> do
            threadDelay 5000 -- THIS FIXES THE PROBLEM!?
            writeToReqChan conn chan input
            runConnection conn chan True
Run Code Online (Sandbox Code Playgroud)

这是输入被解析的部分(Thread2):

runApiHandler …
Run Code Online (Sandbox Code Playgroud)

sockets haskell

1
推荐指数
1
解决办法
458
查看次数

SonataAdminBundle使用事件订阅服务器

我尝试在SonataAdminBundle表单中设置当前经过身份验证的用户:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
    ->add('title')
    ->add('content')
    ->add('slug')
    //->add('user')
    ;
}
Run Code Online (Sandbox Code Playgroud)

由于我不希望用户选择/选择自己的用户,因此我想在用户发送表单(没有任何用户对象)的过程中设置用户名。(注意:我想以几种形式使用它,所以我需要一个通用的解决方案。)

我现在做的是在阅读以下内容后设置EventListener:http : //symfony.com/doc/current/cookbook/service_container/event_listener.html

class PostListener
{
    protected $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }


    public function prePersist(LifeCycleEventArgs $args)
    {
        $entity = $args->getEntity();

        //Get user
        $securityContext = $this->container->get('security.context');
        $user = $securityContext->getToken()->getUser();

        //Set authenticated user as autor
        $entity->setUser($user);
    }
}
Run Code Online (Sandbox Code Playgroud)

包括服务:

post.listener:
  class: Backender\BlogBundle\Listener\PostListener
  calls:
    - [ setContainer, [ @service_container ] ]
  tags:
    - { name: doctrine.event_listener, event: prePersist }
Run Code Online (Sandbox Code Playgroud)

现在不确定这是否正确,因为我不想在要设置用户的地方指定表单。(这个人想在每个表格上设置用户吗?)

经过更多研究,似乎我必须使用这样的事件订阅服务器:http ://symfony.com/doc/2.0/cookbook/form/dynamic_form_generation.html在此示例中,他们使用FormEvents …

symfony symfony-2.1 sonata-admin

0
推荐指数
1
解决办法
5862
查看次数

标签 统计

haskell ×1

sockets ×1

sonata-admin ×1

symfony ×1

symfony-2.1 ×1