基于tornado的web linux远程登录
- 作者: 日天大圣
- 来源: 51数据库
- 2022-08-12
import select
import socket
import errno
from threading import Thread
from tornado.websocket import WebSocketClosedError
class IOLoop(Thread):
def __init__(self):
super(IOLoop, self).__init__()
self.daemon = True
self.select = select.epoll()
self.connections = {}
self.websockets = {}
@staticmethod
def instance():
if not hasattr(IOLoop, "_instance"):
IOLoop._instance = IOLoop()
return IOLoop._instance
def register(self, fileno, connection, websocket):
self.select.register(fileno, select.EPOLLIN | select.EPOLLET)
self.connections[fileno] = connection
self.websockets[fileno] = websocket
def run(self):
while True:
epoll_list = self.select.poll()
for fd, events in epoll_list:
if select.EPOLLIN & events:
while True:
try:
data = self.connections[fd].recv(1024)
except socket.error, e:
if e.errno == errno.EAGAIN:
self.select.modify(fd, select.EPOLLET)
elif isinstance(e, socket.timeout):
break
else:
self.close(fd)
try:
self.websockets[fd].write_message(data)
except WebSocketClosedError:
break
elif select.EPOLLHUP & events:
self.close(fd)
else:
continue
def close(self, fd):
self.select.unregister(fd)
self.connections[fd].close()
self.websockets[fd].close()
del self.connections[fd]
del self.websockets[fd]
推荐阅读
热点文章
Discord.py(重写)on_member_update 无法正常工作
0
Discord.py 在 vc 中获取用户分钟数
0
discord.py 重写 |为我的命令出错
0
Discord.py rewrite 如何 DM 命令?
0
播放音频时,最后一部分被切断.如何解决这个问题?(discord.py)
0
在消息删除消息 Discord.py
0
如何使 discord.py 机器人私人/直接消息不是作者的人?
0
(Discord.py) 如何获取整个嵌入内容?
0
Discord bot 尽管获得了许可,但不能提及所有人
0
Discord.py discord.NotFound 异常
0
