我使用的是python 3和Django 1.9,前端是android。
我必须提供2个连接,一个是通过API,以便用户可以使用UI并将他/她的详细信息发送到后端;第二,套接字连接,用于接收硬件详细信息,故障日志和向应用程序发送更新。
下面是我的套接字服务器。
import socket, ssl, json
from threading import Thread, active_count
from socketserver import ThreadingMixIn
#from serializers import create_log_entry
# Multithreaded Python server : TCP Server Socket Thread Pool
class ClientThread(Thread):
def __init__(self,ip,port,conn):
Thread.__init__(self)
self.ip = ip
self.port = port
self.conn = conn
print ("[+] New server socket thread started for " + ip + ":" + str(port), active_count() )
def run(self):
connstream = ssl.wrap_socket(self.conn,
server_side=True,
certfile="/home/ubuntu/workspace/logs/server.crt",
keyfile="/home/ubuntu/workspace/logs/server.key")
while True :
data = connstream.read()
print ("Server received data:", data)
if data != b"" : data = json.loads(data.decode("utf-8"))
else:
print("Exiting loop")
break
print ("Server received data:", data)
#create_log_entry(data)
connstream.send("OK".encode("utf-8")) # echo
# Multithreaded Python server : TCP Server Socket Program Stub
TCP_IP = '0.0.0.0'
TCP_PORT = 2005
BUFFER_SIZE = 20 # Usually 1024, but we need quick response
def socket_server():
tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpServer.bind((TCP_IP, TCP_PORT))
threads = []
while True:
tcpServer.listen(4)
print ("Multithreaded Python server : Waiting for connections from TCP clients...")
(conn, (ip,port)) = tcpServer.accept()
newthread = ClientThread(ip,port,conn)
newthread.start()
threads.append(newthread)
for t in threads:
t.join()
socket_server()
但它是有线程的并且听特定的端口。我在序列化程序文件中调用socket_server()
来启动服务器。此服务器使用序列化程序文件中的方法,该方法在MongoDB中创建条目。
现在当我启动Django时,它将停止此方法调用,并且我无法使用API,因为服务器是中途启动的。
我需要在Django中进行哪些配置以便两者都有效?
答案 0 :(得分:0)
我建议调查Django频道。
根据文件:
Channels是一个吸引Django并将其能力扩展到HTTP以外的项目 - 用于处理WebSockets,聊天协议,物联网协议等。
您可以像安装任何其他应用程序一样安装它并进行配置。唯一的区别是,不是创建新的视图或api调用并将它们映射到urls.py文件,而是创建新的使用者并将其映射到新的 routing.py 文件。
消费者很少负责“消费”事件(例如连接,断开连接,接收消息......)
目前可安装为:
pip install -U channels
https://channels.readthedocs.io/en/latest/installation.html
我强烈建议您按照本教程进行操作:
https://channels.readthedocs.io/en/latest/tutorial/part_1.html
以下是它的文档: