将SimpleWebSocketServer与Django和Apache集成

2 投票
1 回答
671 浏览
提问于 2025-04-18 14:57

我在使用 Django 和 Apache,并且用的是 mod_wsgi。
我正在尝试这个模块: https://github.com/opiate/SimpleWebSocketServer
简单来说,我想把 WebSocket 服务器和我的 Django 应用结合起来,这样我就可以在两个服务器之间共享变量和进行数据库查询。

这是我使用这个库的代码:
myserver.py

from SimpleWebSocketServer import WebSocket, SimpleWebSocketServer
import thread
class socket(WebSocket):
    def handleMessage(self):
        if self.data is None:
            self.data = ''
        print self.data
        # echo message back to client
        self.sendMessage(str(self.data))

    def handleConnected(self):
        print self.address, 'connected'
        #print self.request
        #print self.server.connections

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

server = SimpleWebSocketServer('',8001,socket)
#server.serveforever()
thread.start_new_thread(server.serveforever,())
print "done"

我使用了 thread,这样就不会阻塞其他代码的运行。
如果我单独运行这段代码,并在浏览器中创建一个 WebSocket:

javascript

var socket;
function startSocket(){
    socket= new WebSocket("ws://localhost:8001");
    socket.onopen= function(evt) {test.innerHTML+="connected\n";};
    socket.onclose = function(evt) {test.innerHTML+="disconnected\n"};
    socket.onmessage = function(evt) { alert(evt.data);};
    socket.onerror = function(evt) {alert("error");};
}
startSocket();

一切都运行得很好。问题是如何把它集成到我的 Django 代码中。
所以我把 myserver.py 的代码放在了我项目的 __init__.py 文件里。我创建了一个设置项 WEB_SOCKET,并把 SimpleWebSocket 实例赋值给它。这个对象确实创建了(我在调试模式下检查过),但是仍然没有事件,没有连接,什么都没有。它就是不工作。为什么呢?
也许还有其他解决这个问题的方法?我需要一些简单易用的东西,就像这个模块,并且它必须能够和 Django 集成。

1 个回答

0

你只需要把你项目的地址加到 Python 的路径里,这样就可以在 os.environ 中设置你项目的配置位置,这样就可以了。

import sys,os
sys.path.append('path_to_my_dango_project')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

from app.models import *
...
obj=Model()
..
obj.save()

撰写回答