- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 python-socketio 设置一个 socket.io 服务器.这是一个最小的工作示例:
import asyncio
from aiohttp import web
import socketio
import random
sio = socketio.AsyncServer(async_mode='aiohttp')
app = web.Application()
sio.attach(app)
@sio.on('connect')
def connect(sid, environ):
print("connected: ", sid)
@sio.on('sendText')
async def message(sid, data):
print("message ", data)
# await asyncio.sleep(1 * random.random())
# print('waited', data)
@sio.on('disconnect')
def disconnect(sid):
print('disconnect ', sid)
if __name__ == '__main__':
web.run_app(app, host='0.0.0.0', port=8080)
这运行良好,我可以执行(在 node.js 中)例如
const io = require('socket.io-client');
const socket = io('ws://localhost:8080');
socket.emit('sendText', 'hey 1')
socket.emit('sendText', 'hey 2')
socket.emit('sendText', 'hey 3')
如果我运行服务器并运行上面的节点脚本,我得到服务器端
connected: c1e687f0e2724b339fcdbefdb5aaa8f8
message hey 1
message hey 2
message hey 3
但是,如果我取消注释代码中带有 await sleep 的行,我只会收到第一条消息:
connected: 816fb6700f5143f7875b20a252c65f33
message hey 1
waited hey 1
我不明白为什么下一条消息没有出现。async def message
只能同时运行一个实例吗?或者为什么?
我确信我不了解有关其工作原理的一些非常基本的东西。如果有人能指出我不理解的地方,我将不胜感激。
最佳答案
我是 python-socketio 包的作者。我认为这里有两个问题。我可以回答你的问题:
Can only one instance of async def message run at the same time? Or why?
我的 Socket.IO 服务器序列化从给定客户端接收的事件。因此,例如,如果客户端 A 发送一个运行一分钟的事件,则 A 在该分钟内发送的任何其他事件都将排队,等待第一个事件先完成。如果客户端 B 在那一分钟内发送了一个事件,它将被立即处理。来自客户端的事件被人为序列化的原因是为了防止由于同一客户端的两个或多个处理程序并行运行而发生竞争条件或其他副作用。可以使用 async_handlers
选项关闭此事件序列化:
sio = socketio.AsyncServer(async_mode='aiohttp', async_handlers=True)
使用 aiohttp 2.3.7 和 async_handlers=True
您的三个事件或多或少在同一时间收到,然后所有处理程序在它们的 sleep 期间并行等待。
不幸的是,这并不能解释从未到达服务器的第二个和第三个事件。我已经验证这些事件在 aiohttp 2.2.5 中已正确排队并按顺序执行,但这与 2.3.0 一直中断到 2.3.7。我目前的理论是,2.3.0 中引入的一项更改导致这些在任务休眠时到达的消息被丢弃,但尚未找到发生这种情况的原因。
关于python - 了解 python 套接字 io/aiohttp 服务器中的异步等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48229592/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!