zoukankan      html  css  js  c++  java
  • php monolog 的写日志到unix domain socket 测试终于成功

    在另外一个客户端执行 php s.php后, 通过nc -lU /tmp/tg.sck 建立的unix domain socket 有接收到消息。

    <?php
    require 'vendor/autoload.php';
    
    use MonologLogger;
    use MonologHandlerSocketHandler;
    
    // Create the logger
    $logger = new Logger('my_logger');
    
    // Create the handler
    $handler = new SocketHandler('unix:///tmp/tg.sck');
    $handler->setPersistent(true);
    
    // Now add the handler
    $logger->pushHandler($handler, Logger::DEBUG);
    
    // You can now use your logger
    $logger->info('My logger is now ready');
    

      

    --------------------------------------------------------------------------

    php (or python) listen to unix domain stream socket

    I need to create a script that listens to a unix socket and forward the incoming stream to a bot. The scripts are unable to connect. The issues seems to be related to the order of things.

    Proof of case

    I have created a socket and I am able to write to it. In session 1, I create a listener connection

    nc -lU /tmp/tg.sck

    In session 2, I write to the socket.

     while true; do echo "hello"; sleep 2; done | nc -U /tmp/tg.sck

    The above only works if I do it in that order. ==> Writing before you have a listener results in an error.

    Using scripts (does not work)

    When I replace the listing process with a PHP (or Python) script, the connection is refused because the socket is not opened.

    $ python test.py 
    Connecting...
    socket.error: [Errno 111] Connection refused

    or

    $ php test.php 
    Warning:  fsockopen(): unable to connect to unix:///tmp/tg.sck:-1 (Connection refused)

    Changing the order of things

    If I start a working listener using the command nc -lU /tmp/tg.sck then the script does not die, but the writer process does.

    Listener scripts

    import socket
    import sys
    
    server_address = '/tmp/tg.sck'  # Analogous to TCP (address, port) pair
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.connect(server_address)
    sock.recv(512)

    and the php script

    $fp = fsockopen('unix:///tmp/tg.sck', -1, $errno, $errstr, 30);
    if (!$fp) {
      echo "$errstr ($errno)<br />
    ";
    } else {
      while (!feof($fp)) {
        echo fgets($fp, 4096);
      }
      fclose($fp);
    }
  • 相关阅读:
    tp5.1接入支付宝网站支付
    go类型转换
    mysql常见sql练习题
    php 获取当前时间的 前一小时、一天、一个月、一年
    php如何检测是否有环
    Go的切片:长度和容量
    go实现小项目
    知乎网页版不登录如何浏览内容
    图挂了
    centos搭建php环境
  • 原文地址:https://www.cnblogs.com/oxspirt/p/8568476.html
Copyright © 2011-2022 走看看