使用SimpleWebSocketServer模块

时间:2016-04-28 17:42:46

标签: python websocket


我正在尝试用Python实现websocket安全服务器(基于this模块)
在链接中,它表示该模块支持TLS和SSL连接,但不解释如何
我现在的代码是这样的:

from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
import ssl

class SimpleResponder(WebSocket):

    def handleMessage(self):
        self.sendMessage(self.data)

    def handleConnected(self):
        print self.address, 'connected'

    def handleClose(self):
        print self.address, 'closed'

server = SimpleWebSocketServer('', 8000, SimpleResponder)
try:
    server.serveforever()
except KeyboardInterrupt:
    pass
print "Server ended"

我尝试以与使用HTTP服务器相同的方式实现SSL包装(如此):

server.socket = ssl.wrap_socket (server.socket, certfile='path/to/localhost.pem', server_side=True)

但似乎它不起作用(我得到下一个错误):

AttributeError: 'SimpleWebSocketServer' object has no attribute 'socket'

很明显,SimpleWebSocketServer类的结构不像SimpleHTTPServer类。

那么可以我如何实现安全的websocket服务器?

1 个答案:

答案 0 :(得分:2)

来自simple-websocket-server

  

TLS / SSL示例

     

1)使用密钥

生成证书
openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
     

2)运行安全TSL / SSL服务器(在这种情况下,cert.pem文件位于   同一目录)

python SimpleExampleServer.py --example chat --ssl 1 --cert ./cert.pem
     

3)通过提供websocket.html将证书提供给浏览器   通过https。 HTTPS服务器将在本地查找cert.pem   目录。确保websocket.html也在同一目录中   服务器运行的地方。

sudo python SimpleHTTPSServer.py 
     

4)打开Web浏览器:   https://localhost:443/websocket.html

     

5)将ws:// localhost:8000 /更改为wss:// localhost:8000并单击   连接。

     

注意:如果您在连接时遇到问题,请确保   证书已添加到您的浏览器中以防止异常   您要连接的https://localhost:8000或任何host:端口对   到。

我发现Autbahn|Python非常容易使用。它适用于Twistedasyncio网络引擎。