问题标签 [ws4py]
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.
python - 如何防止会话超时而不在 Watson Speech To Text 中发送“no-op”消息?
在 Watson Speech To Text 和 Watson Conversation 服务的帮助下,我制作了一个在 NAO Robot 上运行的 Python 应用程序,充当“朋友”。机器人将在提问和回答问题之间交替。
当机器人处于“提问”模式时,它会倾听人类的声音并将语音流式传输到 Watson STT。语音是使用 Arecord 录制的。每当用户完成通话时,Arecord 就会停止。然后转录的语音将被发送到 Conversation,然后机器人将相应地回答问题。通常,“答题”模式会持续不到 30 秒。但是有些回复足够长,以至于 Watson STT 会触发会话超时。
为了防止此会话超时,我们过去每 10 秒发送一次“no-op”消息信号。
但是,Watson最近弃用了发送“no-op”消息以防止会话超时。作为发送“no-op”的替代方法,您可以发送静音音频数据以防止会话超时。根据文档:
“向服务发送音频数据(包括静音)以避免 30 秒 > 会话超时。您将为发送到服务的任何数据付费,>包括您为延长会话而发送的静音。”
所以我尝试了这个:
但是,我收到了这个错误:
Msg received: {u'error': u'could not detect endianness after looking at a tail 924 non-zero byte string in a data stream of 1024 bytes. 字节流真的是 PCM 数据吗?'}
之后,websocket 也会立即关闭。将静音音频数据发送到 Watson STT 的正确方法是什么?或者是否有任何其他解决方法可以防止会话超时?
python - 为什么这个 ws4py/CherryPy 示例会在一段时间后阻止消息?
我有以下设置:
在 Linux x64 下使用 Python 3.4 运行的是带有 ws4py-0.4.2 广播处理程序的 CherryPy-10.2.1 网络服务器,它将打印接收到的消息(包含时间戳)和该消息的运行时间。
然后有 60 个客户端线程(我也使用 10、20、50 和 70 个线程,结果相似)将使用 ws4py 连接到服务器。他们将每 0.1 秒发送一次时间戳消息。
在服务器日志文件中大约 48500 行之后,消息只会在 10 秒的间隔后到达。但是客户端线程继续以原始速度发送。似乎消息已发送,被缓冲并且仅在 10 秒后才释放。
如果我终止客户端线程,消息不会丢失,但所有被阻止的消息都会被释放并出现在广播处理程序中(使用它们各自的运行时,取决于你让线程运行多长时间。如果你让客户端线程发送那么长的时间。)
如果我关闭sock
客户端并在 850 次发送后再次连接(这将是在 51000 条消息之后),则消息首先会被阻止,但由于重新连接,这些消息很快就会“刷新”并且消息出现在服务器日志中。
这些消息在哪里被阻止?ws4pysend()
函数正在使用socket.sendall()
,这个发送有问题吗?或者消息是否在服务器端被阻止(因为如果我杀死客户端,消息仍然会传递)?
有人知道这种消息屏蔽吗?
服务器:
客户:
2018 年 2 月 7 日更新:
“阻塞行为”的原因是self.sock.sendall()
ws4py 包的 websocket.py 文件中的调用超时。
您可以编辑broadcast()
类WebSocketManager
(manager.py) 的函数来记录异常。
但我仍然不知道为什么这个例子会产生这些超时。我注意到一件事,使用线程客户端WebSocketClient
而不是WebSocketBaseClient
.
python - ws4py.websocket:从客户端长时间延迟关闭连接
我使用 ws4py.websocket 包创建了一个安全的 WebSocket 服务器。
一个 JavaScript 客户端连接到这个 Websocket 并向它发送一些 JSON 消息。
现在,当我的 JS 客户端关闭连接(function disconnect
)时,大约需要 30 秒才能closed
调用服务器的函数
这是代码:
服务器
客户
关于为什么关闭连接这么长时间的任何线索?有什么方法可以更快地终止连接吗?