如何杀死扭曲的协议实例python

2024-01-22

我有一个使用 Twisted 用 python 编写的服务器应用程序,我想知道如何终止我的协议(bottalk)的实例。每次我获得新的客户端连接时,我都会在内存中看到该实例(print Factory.clients)..但是假设我想从服务器端终止其中一个实例(删除特定的客户端连接)?这可能吗?我尝试使用 lineReceived 查找短语,如果匹配,则 self.transport.loseConnection()。但这似乎不再引用实例或其他东西。

class bottalk(LineReceiver):

    from os import linesep as delimiter

    def connectionMade(self):
            Factory.clients.append(self)
            print Factory.clients

    def lineReceived(self, line):
            for bots in Factory.clients[1:]:
                    bots.message(line)
            if line == "killme":
                    self.transport.loseConnection()

    def message(self, message):
            self.transport.write(message + '\n')

class botfactory(Factory):

    def buildProtocol(self, addr):
            return bottalk()

Factory.clients = []

stdio.StandardIO(bottalk())

reactor.listenTCP(8123, botfactory())

reactor.run()

您通过调用关闭了 TCP 连接loseConnection。但是您的应用程序中没有任何代码可以从clients工厂清单。

尝试将其添加到您的协议中:

def connectionLost(self, reason):
    Factory.clients.remove(self)

这将从中删除协议实例clients协议连接丢失时的列表。

另外,您应该考虑不使用全局Factory.clients来实现这个功能。由于全局变量不好的所有常见原因,它很糟糕。相反,为每个协议实例提供一个引用its工厂并使用:

class botfactory(Factory):

    def buildProtocol(self, addr):
        protocol = bottalk()
        protocol.factory = self
        return protocol

factory = botfactory()
factory.clients = []

StandardIO(factory.buildProtocol(None))

reactor.listenTCP(8123, factory)

现在每个bottalk实例可以使用self.factory.clients代替Factory.clients.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何杀死扭曲的协议实例python 的相关文章

随机推荐

  • IdentityServer、声明和角色

    我正在使用 Identity Server v4 但我认为与 v3 相同 和 NET Core 现在我有一个我不明白的奇怪问题 在我的 MVC 应用程序中 我使用 授权 角色 极客 保护我的控制器 操作 从以下位置查看当前用户HttpCon
  • 在android中为按钮添加阴影

    我试图在单击时在图像按钮上添加某种阴影 是否可能以及如何实现 所以我有按钮 我希望当我点击它时它看起来像是被按下的 所以我创建了新的 xml 如下所示
  • 如何在 Next JS 博客中实现上一篇文章和下一篇文章?

    我想从特定的博客文章转到上一篇文章和下一篇文章 考虑一下这个盖茨比的例子 https gatsby starter blog demo netlify com my second post https gatsby starter blog
  • 如何停止 Android webView swipeToRefresh 加载进度条?

    注意 这个问题已经被问过here https stackoverflow com questions 41467855 how to stop swipetorefresh progressbar in webview没有得到任何答案 所以
  • 在迭代 Java ArrayList 时修改它

    我想做类似的事情this https stackoverflow com questions 993025 java adding elements to a collection during iteration 但是 我不希望迭代添加的
  • ListJoinedTeams 可以指定 /me 工作,但不能指定 /user

    I tried ListJoinedTeams与指定用户 但它不起作用 我试过ListJoinedTeams与我自己和Listmessage与指定用户一起使用并且它有效 不起作用 https graph microsoft com v1 0
  • 如何在媒体查询中使用 > 或 <(大于和小于)符号

    我们可以在媒体查询中使用 gt 或 media screen and min width lt 768px 媒体查询不使用这些符号 相反 他们使用min and max 前缀 这包含在spec http www w3 org TR css3
  • bootstrap 无法连接到 Angular 6?

    npm install bootstrap 配置angular json styles node modules bootstrap dist css bootstrap min css styles scss 直接导入src style
  • OL3:按坐标从图层获取特征

    我想通过坐标获取图层的特征 此外 我想在弹出窗口中打开此功能 到目前为止我已经通过 onclick 事件解决了这个问题 但我想通过给出特征的坐标并打开特征的弹出窗口来实现 我有一个带有地图的图层和一个带有以下功能的图层 if trackMa
  • 为什么案例类的“unapply”方法的实现中有一个“null”检查?

    我正在努力更换unapply案例类的伴随对象上的方法与我自己的实现 在调查了许多与实施相关的不同切线之后unapply 看来有一个null其中大多数都受到保护 无论是在编译器生成的代码中还是在显式重新定义的实现中 编译器生成的代码为unap
  • 使用 ArrayController 中的 Binding 对 NSScrollView、NSTableView 的内容进行排序

    我有一个NSScrollView这与一个绑定ArrayController 我需要按字母顺序对内容进行排序 我尝试使用绑定来做到这一点 但找不到合适的绑定 我用了以下sortDescriptor on my ArrayController
  • 如何将 NodeJS 和 node_modules 添加到 Mac 应用程序

    我正在编写一个 Mac 应用程序 当前依赖于节点二进制文件的存在 这种方法的主要不便在于 由于 App Store 的限制 用户需要授予对节点二进制文件以及全局 node modules 文件夹的访问权限 所以我的想法是将节点二进制文件以及
  • 如何使 pytest 因警告而崩溃?

    这是一个扩展如何找到 因非串联而排序 警告的来源 https stackoverflow com questions 54486927 how do i find where a sorting because non concatenat
  • 数据包已发送但无法接收到数据包

    我一直在编辑安卓toyvpn https android googlesource com platform development master samples ToyVpnVPN 的示例项目 我为我的示例应用程序找到了这个 我知道我的代
  • PHP 变量大小有限制吗?

    我需要知道 PHP 是否有可变的限制大小 我从 SQL 数据库中获取一个字符串字段并使用echo在网页上查看它 我遇到的问题是 当我查看网页时 我看不到数据库字段中的所有内容 PHP 变量的大小有限制吗 有没有办法让 PHP 从数据库中读取
  • 如何使用 Ninject 将服务注入授权过滤器?

    我正在使用 asp net mvc 3 ninject 2 0 和 ninject mvc 3 插件 我想知道如何将服务层放入我的过滤器中 在本例中是授权过滤器 我喜欢进行构造函数注入 所以这是可能的还是我必须进行属性注入 Thanks E
  • 当 cfn 模板和管道都是使用 AWS CDK 创建时,如何使用 CodePipeline 部署 CloudFormation 堆栈?

    我使用 AWS CDK 创建了一个带有自动扩展组的简单堆栈 并定义了启动配置资源以在 ec2 实例创建期间执行一些 powershell 脚本 这些脚本位于同一个 cdk typescript 项目中 我使用 aws s3 asset 构造
  • UICollectionView 最后一个单元格未对齐

    我是 iOS 新手 现在遇到一个问题 我的目标是获得一个带有过滤按钮的滑动条 我有一个 UICollectionView 作为其他视图中的子视图 除了最后一个单元格之外 所有视图都显示良好 这是 uicollectionview 的委托和日
  • 当我在平面上嵌入平面图时,如何找到包含预定义点的面

    我有一个嵌入在平面上的平面图 平面图 并且想要搜索它的面 该图不是连接的 而是由多个连接的图组成 这些图不能单独寻址 例如 子图可以包含在另一个图的表面中 我想找到包含某个二维点的多边形 面 多边形由图形的面形成 由于面孔数量相当大 我想避
  • 如何杀死扭曲的协议实例python

    我有一个使用 Twisted 用 python 编写的服务器应用程序 我想知道如何终止我的协议 bottalk 的实例 每次我获得新的客户端连接时 我都会在内存中看到该实例 print Factory clients 但是假设我想从服务器端