将SimpleWebSocketServer与Django和Apache集成
我在使用 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()