问题标签 [asyncore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
691 浏览

python - 在 Python 中具有异步或替代的双向套接字 I/O

我正在研究 Django Web 应用程序的后端,该应用程序还必须使用 TCP 通信通过 GPRS 与现场的传感器设备进行套接字 I/O。

我已经成功地使用 python 模块从设备获取数据asyncore。我一直在做的是将设备配置为通过 TCP 将数据发送到服务器,然后我会使用asyncore(我选择它是因为它是套接字 i/o 的异步方法)来获取这些传入数据。

文档讨论了重载asyncore.dispatcherorasyncore.dispatcher_with_send以便能够在回调中实现自定义操作,如handle_write,handle_read等。

目前,可以通过方法中的pickup来获取传入的数据handle_read,但是最近出现了一个新的需求:

当设备连接到服务器时,它需要能够保持连接,以便我们可以向它发送一些命令(比如要求它识别自己),然后在发现真实的情况下继续使用它发送的数据。

所以,我handle_write在我的实现中的方法中添加了代码,将“识别你自己”命令发送到与我们连接的设备。但我的问题是,即使设备继续连接并且handle_read显示我可以获得传入数据,这段代码也永远不会执行!

我尝试输入“识别自己”代码(发送一些如下所示的十六进制命令)

希望handle_read在我保留之前发送的数据时会收到响应,但这失败了!我能做些什么?

什么是更好/最好的方法来实现这一目标?

0 投票
1 回答
775 浏览

python - python异步状态

我刚刚开始使用 python 套接字网络的基础知识。作为理解练习,我一直在尝试散列一个基本服务器,该服务器将向其客户端询问文件类型,并在收到扩展名字符串后,询问实际文件。我在网上找到了许多使用 asyncore 库的教程,特别是 asynchat 来设置这种调用和响应功能。

我一直在关注的最基本的可以在这里找到(我已经复制了它)

http://effbot.org/librarybook/asynchat.htm

我的问题与班级的handle_accept方法有关HTTPServer。如果每次有请求进来,HTTPChannel对象都会被初始化,这样的设置是不是不可能创建调用和响应?_hastype我在想一个人可以为和设置标志_hasfile在通道对象中,但由于接受为每个单独的连接初始化它,因此每个单独的请求都会忘记对象的状态。我意识到这个设置应该是一个基本的 HTTPServer,但我的问题是,我如何编辑它来设置像我所描述的那样?服务器对象是否需要继承 asynchat 本身并完全放弃调度程序?通道对象必须有一些状态才能知道文件类型已经发送,然后请求文件的二进制文件。我很想知道最干净的实现可能是什么样子。

非常感谢 - 我对套接字很陌生。如果我不清楚,请告诉我。

0 投票
1 回答
702 浏览

python - python asynchat:如何存储有关单个连接的信息,以及如何知道客户端何时断开连接

为了好玩,我正在用 asynchat 编写一个最小的 IRC 服务器。我正在尝试澄清一些基础知识(我的具体问题遵循代码)。我决定不在 Twisted 中使用任何东西,这样我就可以自己实现更多。首先,我拥有的代码:

所以,在我看来,这个代码结构类似于 Twisted 客户端工厂:Server该类被初始化一次,并且基本上Connection每次客户端连接时都会实例化。第一个问题:通过将所有连接存储在列表中来跟踪所有连接的客户端的最佳方法是Server什么?

另外,我不明白如何知道特定客户端何时关闭与我的套接字的连接?Connection实现 asynchat(以及扩展 asyncore),但是Connection当客户端断开连接时,将 handle_close() 回调添加到类中不会触发。它似乎仅适用于服务器上的绑定套接字被破坏时。我没有看到任何用于此目的的方法。无论客户端是否连接,此套接字始终保持打开状态,对吗?

0 投票
2 回答
746 浏览

python - 使用 Python asyncore 对网站进行负载/压力测试

希望有人能够帮助解决这个问题。

简短版本:我正在寻找用 Python 构建自己的网站压力测试器。

为什么?因为我喜欢它 :) 我不是在寻找预先构建的解决方案 [即 funkload 或 JMeter]。作为编程练习,这似乎是一件有趣的事情。我还认为,学习如何做我想做的事在以后的其他情况下可能会很有用。

我要它做什么?随着时间的推移,我打算让它变得更复杂,但我的第一个目标很简单:在尽可能短的时间内发出尽可能多的请求。我正在拍摄每秒 300-500 个请求。

我尝试了许多不同的方法。最有前途的两个是:

  1. 产生线程。其中很多。让每个线程发出一个请求。这被证明是最快的[每个线程每秒可以轻松地接近 1 个请求 - 500 个线程意味着每秒几乎 500 个请求],但是它似乎对计算机来说非常密集。在我看来,在 Python 中生成数百个线程所占用的内存和计算量令人望而却步。我觉得必须有一个更优雅的解决方案。
  2. 使用 Python 的 asyncore 库。我一直在搞这个,它似乎真的很酷,但我很快就结束了。如果我收到大约 140 个字节的请求,那么它每秒能够抛出 >1000 个请求 [太棒了!],但我需要它能够处理响应相当大的请求 [即 100kb - 500kb]。引入更大的响应大小意味着它每秒限制大约 10-50 个请求 [如果我幸运的话]。

有没有人有任何想法或建议?如果我能以某种方式获得响应的大小而无需实际读取它,那将是完美的。我只想知道我实际上得到了正确的字节数。数据是什么并不重要。

或者,如果这不是 Python 中的一个选项,那么老实说,我愿意尝试任何人必须提出的任何建议。我玩过 Twister,但没有达到比我已经看到的线程更高的速度。

无论如何 - 任何帮助都会很棒。谢谢!

0 投票
1 回答
4591 浏览

python - Python 的异步客户端将定期数据发送到服务器

我需要连接到服务器(例如 smpp 服务器)并每 2 秒发送一次定期数据,代码如下:

这是运行时的输出:

我的线程通过缓冲区变量每 2 秒向服务器发送一次数据,但是 asyncore 每 1 分钟准确地调用一次可写和 handle_write,我不明白为什么它在从线程中填充后不获取缓冲区?

0 投票
2 回答
2806 浏览

python - Asyncore 循环和 raw_input 问题

我正在尝试学习异步模块。所以我决定开发一个聊天程序。我必须同时收听网络和广播 udp 包。但问题是在用户输入消息时,用户看不到其他用户发送的其他消息。我该怎么办?我的代码:

0 投票
3 回答
1352 浏览

python - Performance difference between urllib2 and asyncore

I have some questions about the performance of this simple python script:

Here's the output I'm getting on linux:

Why is urllib2 so much slower than asyncore in the first run?

And why does the discrepancy seem to disappear on the second run?

EDIT: Found a hackish solution to this problem here: Force python mechanize/urllib2 to only use A requests?

The five-second delay disappears if I monkey-patch the socket module as follows:

0 投票
1 回答
392 浏览

python - 处理来自同一事件循环的 SimpleXMLRPCServer 调用和 Asyncore.dispatchers 事件

如何处理来自同一个事件循环的 Asyncore.dispatcher(s) 和 SimpleXMLRPCServer 事件?

PS 我已经知道你们中的一些人可能会为此推荐 Twisted,但 Twisted 的问题是它对于我的需求来说有点太高级了。特别是,我通过覆盖依赖于计时器的 Asyncore.dispatcher.writable() 方法来进行 UDP 流控制。不确定这是否/如何在 Twisted 中可行。

0 投票
1 回答
1871 浏览

python - Python asyncore:“选择()中的文件描述符超出范围”

我有一些基于 asyncore lib 的具有超过 3k 个传出套接字连接的 python 脚本。由于连接数限制 (1024),我无法使用 select(..),但 poll(..) 也无法正常工作:

通过此调用,我的应用程序将忽略任何套接字事件。请注意,少于 1024 个套接字的 select() 可以正常工作。

我的问题在哪里?

0 投票
1 回答
1042 浏览

python - python网络:异步握手

我正在使用 python asynchat 来实现网络协议。在连接时,我需要发送一个命令,服务器通过会话进行应答。

我的主要问题是我需要等到我得到会话响应。但不确定如何实现这一点。我应该使用 socket.recv 进行连接设置吗?是个好主意吗?