将Python客户端服务器转换为WebSocket
我创建了一个简单的回显服务器,想用它来做一个简单的网页服务器示例。
到目前为止,我已经有了这个服务器:
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 个回答
要和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回声服务器。