簡體   English   中英

如何使用 Twisted Framework 提供用 Python 編寫的 Websocket 應用程序

[英]How do I serve a Websocket Application written in Python using Twisted Framework

我使用 Twisted Framework 編寫了一個 websocket 服務器應用程序。 我對此並不陌生,正在嘗試弄清楚如何將其用作應用程序,以便我可以使用 NGINX 對其進行反向代理。

該應用程序的主體如下所示:

if __name__ == "__main__":
    #Clear redis cache
    R.flushdb()
    log.startLogging(sys.stdout)
    contextFactory = ssl.DefaultOpenSSLContextFactory('keys/server.key',
                                                          'keys/server.crt')
    ServerFactory = BroadcastServerFactory
    factory = BroadcastServerFactory("wss://127.0.0.1:8080")
    factory.protocol = BroadcastServerProtocol
    resource = WebSocketResource(factory)
    root = File(".")
    root.putChild(b"ws", resource)
    site = Site(root)
    reactor.listenSSL(8080, site, contextFactory)
    reactor.run()

我的理解是我需要創建一個 WSGI 應用程序,但我對如何執行此操作感到困惑。 我不確定如何將此程序更改為 WSGI。 當我使用 Django 和 Flash 時,它們有一個 WSGI 文件,但是這個新項目只是一個使用 Twisted 框架的 python 文件。

抱歉,我有點難以解釋這一點。

我所做的是更改代碼,使其不再具有 if 語句,如下所示:

#New imports
from twisted.application import internet,service

#Bottom of file
R.flushdb()
log.startLogging(sys.stdout)
contextFactory = ssl.DefaultOpenSSLContextFactory('keys/server.key',
                                                        'keys/server.crt')
ServerFactory = BroadcastServerFactory
factory = BroadcastServerFactory("wss://127.0.0.1:8080")
factory.protocol = BroadcastServerProtocol
resource = WebSocketResource(factory)
application = service.Application("picserver")
service = internet.TCPServer('8080', factory) 
resource = WSGIResource(reactor, reactor.getThreadPool(), factory)
root = File(".")
root.putChild(b"ws", resource)
site = Site(root)
reactor.listenSSL(8080, site, contextFactory)
service.setServiceParent(application)
reactor.run()

我將文件重命名為“server.tap”,但我認為這沒有必要。 然后代碼更改允許我使用以下命令將程序作為守護進程運行:

twistd -y server.py 

然后我在 /etc/systemd/system 中創建了一個 .service 文件,如下所示:

[Unit]
Description=picserver startup script 
After=network.target

[Service]
User=django
Group=www-data
Environment="DBNAME=mydb"
Environment="DBUSER=dbuser"
Environment="DBPASSWORD=password"
ExecStart=/home/<username>/Documents/python/environments/gameservertest/bin/python /home/<username>/Documents/python/environments/gameservertest/bin/twistd -y /home/<username>/Documents/python/picturegameserver/server.tap
WorkingDirectory=/home/<username>/Documents/python/picturegameserver/
Restart=always

[Install]
WantedBy=multi-user.target

我現在可以使用“systemctl”將其作為服務運行,並且可以連接在服務器上本地運行的前端。 目前,我認為我不需要配置 Nginx 來反向代理它,因為我可以讓前端在同一台服務器上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM