问题标签 [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.

0 投票
0 回答
411 浏览

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 的正确方法是什么?或者是否有任何其他解决方法可以防止会话超时?

0 投票
0 回答
680 浏览

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.

0 投票
1 回答
1277 浏览

python - ws4py.websocket:从客户端长时间延迟关闭连接

我使用 ws4py.websocket 包创建了一个安全的 WebSocket 服务器。

一个 JavaScript 客户端连接到这个 Websocket 并向它发送一些 JSON 消息。

现在,当我的 JS 客户端关闭连接(function disconnect)时,大约需要 30 秒才能closed调用服务器的函数

这是代码:

服务器

客户

关于为什么关闭连接这么长时间的任何线索?有什么方法可以更快地终止连接吗?