将Python客户端服务器转换为WebSocket

1 投票
1 回答
1274 浏览
提问于 2025-04-17 12:43

我创建了一个简单的回显服务器,想用它来做一个简单的网页服务器示例。

到目前为止,我已经有了这个服务器:

Server.py

from socket import *
import threading
import thread

def handler(clientsock,addr):
    while 1:
        data = clientsock.recv(BUFSIZ)
        if not data:
            break
        msg = 'echoed:... ' + data
        clientsock.send(msg)
     clientsock.close()

if __name__=='__main__':
    HOST = 'localhost'
    PORT = 21567
    BUFSIZ = 1024
    ADDR = (HOST, PORT)
    serversock = socket(AF_INET, SOCK_STREAM)
    serversock.bind(ADDR)
    serversock.listen(2)

    while 1:
        print 'waiting for connection...'
        clientsock, addr = serversock.accept()
        print '...connected from:', addr
        thread.start_new_thread(handler, (clientsock, addr))

我想使用 websockify,我发现它可以通过以下命令来包装一个现有的程序:

./websockify 2023 -- PROGRAM ARGS

我该如何用上面的命令来运行之前的服务器呢? 我可以在一台机器上运行 websockify,而在另一台机器上运行 server.py 吗?如果可以,我该如何修改上面的命令?

有没有人能给我一个简单的 HTML5 示例,告诉我 client.html 应该是什么样子的?请记住,我希望这个示例能在不支持原生 WebSocket 的浏览器上使用。我觉得 websockify 能做到这一点,使用的是 web-socket-js

他们说:它对二进制数据有透明支持,并且如果浏览器不原生支持 WebSockets,会自动回退到 web-socket-js 的 Flash Websocket 补丁/填充

1 个回答

2

要和websockify进行连接,我建议你在客户端的HTML/JavaScript中使用include/websock.js提供的库。这个websock.js API和标准的WebSocket有点不同。

我刚刚在websockify的代码库中添加了一个非常简单的HTML客户端页面

如果你想在同一台机器上运行server.py,可以这样启动websockify:

./websockify --web ./ 21567 -- server.py

然后在浏览器中打开“http://localhost:21567/tests/simple.html”。输入“ws://localhost:21567”作为WebSocket的地址,然后点击连接。注意,wrap模式使用了一个rebind.so,你需要自己编译这个文件,它会把监听端口移开,以便websockify可以为你处理。

你也可以在同一台机器上单独运行websockify:

./server.py
./websockify --web ./ 6080 localhost:21567

在这种情况下,你需要访问“http://localhost:6080/tests/simple.html”,并使用“ws://localhost:6080”作为连接的地址。

如果你想在一台与运行server.py不同的机器上运行websockify,你需要修改server.py,使其监听一个公共接口,而不仅仅是“localhost”。一旦你做了这个修改,如果server.py在192.168.1.7上运行,那么你可以在192.168.1.5上这样运行websockify:

在192.168.1.7上启动server.py:

./server.py

在192.168.1.5上启动websockify,并指向另一台机器上的server.py:

./websockify --web ./ 6080 192.168.1.7:21567

然后你可以在浏览器中访问“http://192.168.1.5:6080/tests/simple.html”,并使用“ws://192.168.1.5:6080”作为WebSocket的地址。

另外,如果你只是想让你的服务器成为一个WebSocket服务器,那么你可以直接使用websocket.py库,而不需要完整的websockify功能,直接创建你的服务器。可以参考tests/echo.py这个示例,它是一个简单的WebSocket回声服务器。

撰写回答