В последнее время я возился с python сокетами и хотел создать своего рода систему событий. Где я мог бы сделать, как
sock.on('message', function(_msg) => {
print(_msg)
})
Я новичок в классах в python и в целом, так что это то, что я до сих пор
КЛИЕНТ
import apollo
apollo = apollo.apollo('127.0.0.1', 4343)
apollo.send_message("test")
apollo.listen_message()
Сервер
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 4343
BUFFER_SIZE = 20
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print('connection adress:', addr)
while 1:
data = conn.recv(BUFFER_SIZE)
if not data: break
print("recived data : ", data)
conn.send(data)
conn.close()
apollo.py
import socket
sock = None
def test(_msg):
print('nin')
class apollo:
def __init__(self, _ip, _port):
self._ip = _ip
self._port = _port
print(self._ip)
global sock
sock = ConnManager(self._ip, self._port, 2000)
#def send_message(self, _msg, _to_uid, _author_uid, _buffer_size):
def send_message(self, _msg):
self._last_message = _msg
global sock
sock.send_message(self._last_message)
def listen_message(self):
sock.on('message', test)
#with sock._conn:
# while True:
# print(sock._conn.recv(1024))
# _msg = input("> ")
# sock.send_message(_msg)
# while False:
# _msg = input("> ")
# send_message(_msg)
#print ("recieived data", data)
class ConnManager:
def __init__(self, host, port, timeout):
self._conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
self._conn.connect((host, port))
def on(self, event, method):
self.function_to_run = method
self._event = event
self._in = sock._conn.recv(1024).decode('utf-8')
if(self._in == self._event):
print('yes')
return self.function_to_run()
#while sock._conn.recv(1024):
# _in = sock._conn.recv(1024)
# print("event" + self._event)
# print(_in)
# if(str(_in) == self._event):
# print(_in)
# return function
def send_message(self, _msg):
self._conn.send(_msg.encode('utf-8'))
, поскольку у меня ограниченные знания о том, как работают классы, как если бы я go сделал для этого, у меня есть ConnManger
для создания объекта подключения, но я не знаю, откуда go оттуда, как вы можете видеть, я уже пытался добавить метод .on
к ConnManager
но я просто потерян Возможно ли то, что я спрашиваю? и будет ли это практичным?