Python WebSocket 无法在 Raspbery 上运行

agi*_*ius 0 javascript python websocket raspberry-pi

使用 localhost 在 mac 上运行服务器和客户端一切正常。

\n\n

在树莓派上运行 python 程序(服务器)并尝试使用其 url 访问它不起作用。

\n\n

Python服务器:

\n\n
class Strompreisgenerator:\n    def __init__(self):\n        self.ws = websockets.serve(self.echo, \'localhost\', 5001)\n        asyncio.get_event_loop().run_until_complete(self.ws)\n        asyncio.get_event_loop().run_forever()\n\n    async def echo(self, websocket, path):\n        async for message in websocket:\n            print(message)\n
Run Code Online (Sandbox Code Playgroud)\n\n

JavaScript 客户端:

\n\n
var ws = new WebSocket("ws://www.tobiasschmocker.ch:5001");\n
Run Code Online (Sandbox Code Playgroud)\n\n

尝试实例化 WebSocket 时出现错误“WebSocket 网络错误:操作无法\xe2\x80\x99t 完成。连接被拒绝” Safari 中

\n\n

端口 5001 在 RPi 上打开。我也尝试过本地IP。我在路由器上转发了端口,但仍然没有任何结果。如果我尝试其他网址,我会收到另一个错误,所以我认为网址是正确的,但我没有任何权利。

\n\n

在我的 RPi 上,我启用了 ssh,还有 php、apache、mysql 以及我的 python 服务器的所有 pip 包。

\n\n

如果您知道问题出在哪里,我很乐意知道。非常感谢!

\n

agi*_*ius 5

现在 websocket 正在运行并且可以通过外部的 url 访问!

以下是完整性的解决方案。我所要做的就是:

  • 更新到 Python 版本 3.6。websockets 包似乎仅适用于 Python 版本 3.6。这是我在 RPi 上安装 Python 3.6 的教程:https://gist.github.com/dschep/24aa61672a2092246eaca2824400d37f
  • 在 python 中使用 0.0.0.0而不是作为localhost主机。在sudo netstat -lptuRPi 终端中,我可以看到所有其他端口(mqtt、ssh 等)都设置为0.0.0.0而不是localhost,所以我只是尝试了一下,它可以工作。

设置完所有这些后,Websocket 现在正在运行。感谢@YonatanKiron 和@Reto!