Не удается запустить несколько слушателей сокетов - PullRequest
0 голосов
/ 27 июня 2019

Я сделал простой класс сокет-сервера. В другом скрипте я хочу инициализировать серверы, передавая некоторые параметры.

import socket
from pygrok import Grok

class Loghunter:

    # We define some global vars
    buffersize = 1024  #buffersize
    bindaddress = '127.0.0.1' #bindaddress
    server_socket = None; #server instance var
    grok = None; #grok instance var

    # Initialize class loghunter
    def __init__(self, *args):

    # Map params to vars
        bindport = args[0]
        socktype = args[1].upper()
        parsertype = args[2]
        pattern =  args[3]

    # Create server depending on protocol type (UDP, TCP)
        if socktype == 'UDP':
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            print 'UDP server started.'

        elif socktype == 'TCP':
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            print 'TCP server started.'

    # Bind server to address and socket
        self.server_socket.bind((self.bindaddress, bindport))

    #self.server_socket.listen(1)

    # Create grok parser and initialize it with pattern
        self.grok = Grok(pattern)

    # While loop is True do some things, like running the function
        while True:

    # Call function to parse message with GROK
            print(self.parsemsg(pattern))

    # Define parser function
    def parsemsg(self, pattern):

    # Get message, address from socket
        message, address = self.server_socket.recvfrom(self.buffersize)
    # Parse message and store it to var
        msg = self.grok.match(message)

    # Return message
        return msg

У меня также есть этот скрипт, где я создаю список с настройками для слушателей и перебираю его, чтобы порождать эти серверы / слушателя. Проблема в том, что он порождает только первого. Тогда это останавливается.

from loghunter import Loghunter

pattern = '<%{INT:pri}>%{INT} %{TIMESTAMP_ISO8601:date} %{HOSTNAME:host} %{DATA:program} (?:%{INT:pid})? %{GREEDYDATA:message}'

inputs = [ [1234, 'udp', 'grok'],[2321, 'udp', 'cef'],[2222, 'udp', 'cef'] ]
running = []

print(inputs)

for srv in inputs:
    print(srv[0])
    log = Loghunter(srv[0], srv[1], srv[2], pattern)
    running.append(log)

print(running)

Вот так это выглядит, когда я запускаю скрипт.

$: python udpserver4.py 
[[1234, 'udp', 'grok'], [2321, 'udp', 'cef'], [2222, 'udp', 'cef']]
1234
UDP server started.

Как мне добиться того, чего я хочу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...