如何在Windows上使用websockify与Python或编译websockify为Windows可执行文件(以支持更多客户端同时连接)

4 投票
2 回答
5972 浏览
提问于 2025-04-20 07:22

我正在尝试在Windows上运行websockify 0.6.0,但是一直没有成功。

我试过用这个命令:python websockify.py 1501 10.0.0.141:1501,但是不太好,出现了一些错误,比如:

追踪(最近的调用最后): 文件 "websockify.py",第 1 行,在 <module> run NameError: name 'run' is not defined

我还尝试过将Websockify编译为Windows可执行文件,但这也没有成功。我使用了以下命令:run.exe 1501 10.0.0.141:1501,一开始看起来还不错,控制台输出了以下内容:

警告:没有 'resource' 模块,守护进程功能被禁用 WebSocket服务器设置: - 监听端口 :1501 - Flash安全策略服务器 - 不支持SSL/TLS(没有证书文件) - 从 :1501 代理到 10.0.0.141:1501

但是在尝试用浏览器连接这个地址:ws://localhost:1501后,

**它输出了以下错误:

追踪(最近的调用最后): 文件 "run",第 5 行,在 <module> 文件 "websockify\websocketproxy.pyc",第 419 行,在 websockify_init 文件 "websockify\websocket.pyc",第 1018 行,在 start_server UnboundLocalError: local variable 'exc' referenced before assignment


有没有人知道如何在Windows上使用websockify,或者如何使用编译好的websockify作为Windows可执行文件?

2 个回答

0

为了解决这个问题,请按照下面修改后的命令来处理你的示例源代码,从每一步的开头开始,看看是否能帮到你:

  • 首先,安装Portable Python 2.7
  • 接下来,你需要修改setup.py(这可能是你遇到第一个错误的原因,因为你可能没有定义run):
from setuptools import setup, find_packages
# add (line 2):
import py2exe

setup(name=name,
# add (line 10):
console=['run'],
  • 确保上面的步骤正确执行,检查setup.py,确保它包含run。

    • 在你的本地代码中,导入resources模块,这样你就可以监控、测量和控制你的程序使用的系统资源
import resource
  • 检查你的本地变量exc,确保在调用它之前已经给它赋值(我猜测你可能把一个系统变量赋给了它,但由于你没有导入resources,python无法这样做,因此它没有被赋值)。如果你愿意,可以在这个回答的评论中贴出你的代码示例,我会仔细看看这部分。

  • 回到你的源代码指南,在命令提示符中导航到websockify文件夹,然后执行以下命令来编译websockify:

[Your path to Portable Python install]\App\python.exe setup.py py2exe --includes numpy
  • 现在你会在websockify目录下看到一个新的目录'dist',里面包含了编译好的exe文件。提供的示例是:
run.exe 5901 localhost:5900

这里还有一个指南可以帮助你将websockify作为Windows服务运行,如果这适合你的话(在你的源代码中也提到过)。

----进一步编辑以提供更多细节----

打开这两个似乎给你带来问题的文件(websockify\websocketproxy.pyc和websockify\websocket.pyc),确保对名为"exc"的变量的任何引用都是在它被赋值之后进行的(如果你还没有修改这些文件,出问题的可能性很小)。

我认为你的代码依赖于对系统资源(比如端口等)的修改和监控,而你没有给你的代码这些权限,所以它需要resources模块。如果你是从一个程序中调用run.exe(我称之为你的本地代码),那么你需要在顶部导入resources。如果你只是直接从命令行调用run.exe程序,那么试着创建这个新程序,看看是否有帮助。如果没有,请把你的websockify文件夹和run.exe的内容发给我,我会看看。

# Program Name: goAndRun.py

# Code:

import sys, string, os, arcgisscripting, resource
os.chdir( 'C:\\[Path_to_the_dir_containing_run.exe]' )
os.system( '"C:\\[Path_to_the_dir_containing_run.exe]\run.exe, 5901 localhost:5900"' )

然后使用以下命令:

python goAndRun.py

由于我不在你的环境中,无法确定这是否会完全按照我写的那样执行。最后一行也可能是:

os.system( '"C:\\[Path_to_the_dir_containing_run.exe]\run.exe"', '5901 localhost:5900' )
1

在Windows上让websockify顺利运行,最简单的方法就是使用Node.js版本的websockify(在other/js目录下)。这个版本开箱即用,完全不需要额外的麻烦。

撰写回答