Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 10, 2011 13:12:36

похмелье
От:
Зарегистрирован: 2011-06-10
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

привет!

что я хочу:
сервер слушает порт (класс ear) и как только появляется соединение - создаёт класс mouth, который будет обмениваться информацией через это соединение. так же можно инициировать соединение самому (через словарь парамаетров класса mouth), задавая адрес назначения.
далее (теста ради) запускаем отдельным тредом asyncore.loop, а основным пытаемся законнектиться к серверу.

import socket,asyncore

class mouth(asyncore.dispatcher):
def __init__(self,**kwargs):
asyncore.dispatcher.__init__(self)
self.buffer=bytes()
if "sock" in kwargs:
self.socket=kwargs["sock"]
elif "host" in kwargs and "port" in kwargs:
self.create_socket(socket.AF_INET,socket.SOCK_STREAM)
self.connect((kwargs["host"],kwargs["port"]))
self.buffer=bytes("YOINK!","utf-8")
def handle_connect(self):
pass
def handle_close(self):
self.close()
def handle_read(self):
print(self.recv(8192))
def writable(self):
return(len(self.buffer)>0)
def handle_write(self):
sent=self.send(self.buffer)
self.buffer=self.buffer[sent:]

class ear(asyncore.dispatcher):
def __init__(self,host,port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET,socket.SOCK_STREAM)
self.bind((host,port))
self.listen(5)
def handle_accepted(self,sock,addr):
print(repr(addr),sock.getsockname())
mouth(sock=sock)

if __name__=="__main__":
ear("localhost",5555)
import threading
threading.Thread(target=asyncore.loop).start()
mouth(host="127.0.0.1",port=5555)
на выходе:
('127.0.0.1', 3487) ('127.0.0.1', 5555)
b''
что я делаю не так?

и ещё хотелось бы задать несколько вопросов касательно “архитектуры” asyncore:
- возможно ли добавлять сокеты в список, который анализирует asyncore.loop?
- если возможно, то как это делать и как разделять сокеты на те, которыми я “слушаю”, которыми “пишу” и т.д.

заранее спасибо!



Офлайн

#2 Июнь 10, 2011 15:15:36

похмелье
От:
Зарегистрирован: 2011-06-10
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

да, разобрался. вместо

self.socket=kwargs["sock"]
следует использовать
self.set_socket(kwargs["sock"])
вопросы в первом посте уже не актуальны. появился другой вопрос. я заглянул в функцию set_socket и add_channel:
    def set_socket(self, sock, map=None):
self.socket = sock
## self.__dict__['socket'] = sock
self._fileno = sock.fileno()
self.add_channel(map)

def add_channel(self, map=None):
#self.log_info('adding channel %s' % self)
if map is None:
map = self._map
map[self._fileno] = self
правильно ли я делаю вывод, что каждый наследник asyncore.dispatcher может “держать” только один сокет? что будет означать, что каждый экземпляр класса соответствует одному сокету, или же каким-то образом можно группировать функционально идентичные сокеты?
если можно, то нужно ли это? влияет ли это на скорость/память?



Офлайн

#3 Июль 6, 2022 14:55:12

ntram
Зарегистрирован: 2022-06-19
Сообщения: 75
Репутация: +  3  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

VANISHED

Отредактировано ntram (Окт. 13, 2022 15:43:40)

Офлайн

#4 Июль 6, 2022 21:03:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9870
Репутация: +  853  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

ntram, там топик от 2011-го года. Ты его наверх поднимаешь в разделе форума. Люди начинают думать, что человек что-то спросил сегодня и начинают отвечать. Это называется некропостинг.



Отредактировано py.user.next (Июль 6, 2022 21:04:16)

Офлайн

#5 Июль 7, 2022 10:05:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

py.user.next
Некротопики поднимают боты. После удаления спама топик выглядит так как будто содержит новые сообщения для мемберов, которые зарегистрировались позднее последнего сообщения в топике



Офлайн

#6 Июль 7, 2022 14:32:04

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9870
Репутация: +  853  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

FishHook
После удаления спама топик выглядит так как будто содержит новые сообщения для мемберов, которые зарегистрировались позднее
Ну, он претендовал на ум, постил про уязвимость даже, найденную им, а тут не сообразил, что к чему?
Я вообще не смотрю на новые сообщения на форуме, потому что они малофункциональны. Бывает ещё, что сообщения прочитаешь в топике, а отвечать пранируешь в другой раз, так как времени нет расписывать что-то подробно. Так в другой раз они уже прочитаны и их не надёшь уже.
О том, что я форум читаю вообще каждый раз без входа, так как печенье стирается у меня каждый раз, и новых и старых сообщений в таком анонимном режиме не видно вообще, я даже не говорю. Но я и писал уже, что просматриваю форум через Emacs и в нём помечаю сообщения, которые хочу перечитать потом, потому что в Emacs'е как раз всё сохраняется между запусками.

Это то, как оно выглядит

Открытое сообщение форума


Список новых сообщений форума


На сообщение поставлен тег “s” (сокращение от see again) и вывод отфильтрован дополнительно по этому тегу. Теги придумываются любые - хоть одинарные буквы, хоть слова. Придумаю буквы, потому что их быстрее набирать потом для фильтрации. Остальные новые сообщения скрываются на время этого фильтра по тегу “s”.


Все новые сообщения вперемешку (форум по питону, сайт новостей, есть и другие источники, в числе которых и новые видео с интересующих YouTube-каналов)


Отфильтровал сайт новостей, убрав вывод сообщений с форума по питону. Вверху строка фильтрации, там через восклицательный знак записано, что запрещены все сообщения с подстрокой “pyth”.


Зашёл в новость про Сару Джессику Паркер и читаю её сразу. Если интересная новость, нажимаю букву “b” и страница новости открывается в браузере в полном виде и с картинками.


Поэтому, как видишь, это в сто раз удобнее функционала форума. Если нет времени отвечать на сообщения, а надо ответить через полдня, например, то я их просто тегом “s” помечаю и в следующий раз просто фильтрую по тегу “s” и показываются только они. После ответов в топиках я теги “s” снимаю с них и всё. Так же и видео на YouTube помечаю, когда нет времени смотреть, а видео интересные и надо посмотреть потом. Работает это всё через RSS.



Отредактировано py.user.next (Июль 7, 2022 14:36:26)

Офлайн

#7 Июль 7, 2022 15:00:17

ntram
Зарегистрирован: 2022-06-19
Сообщения: 75
Репутация: +  3  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

VANISHED

Отредактировано ntram (Окт. 13, 2022 15:43:56)

Офлайн

#8 Июль 7, 2022 15:08:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

py.user.next
Спасибо, держи нас в курсе течения своей шизофрении



Офлайн

#9 Июль 7, 2022 16:28:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9870
Репутация: +  853  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

ntram
скрипт работает на RSS?
Это Emacs закачивает через RSS данные с разных сайтов и формирует из них удобную среду. Поэтому я не завишу от особенностей сайтов, от того, как они там помечают новые и старые сообщения. Да, и поэтому мне не нужно подписываться на YouTube-каналы, жать на колокольчик и так далее, потому что у меня и колокольчика нет, я просматриваю YouTube всегда анонимно, не заходя в аккаунты. А все новые выпуски мне показывает Emacs.

FishHook
Спасибо, держи нас в курсе течения своей шизофрении
Ну, это ты мне про форум что-то рассказывать стал. Я-то сам себе среду строю, поэтому уже давным-давно ушёл с этого уровня развития, на котором ты размышляешь. Мне как-то похрен на новые сообщения, я их вижу без всякого форумского функционала.



Офлайн

#10 Июль 7, 2022 16:38:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

что я делаю не так [asyncore]

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version