서버에서 연결된 클라이언트로 데이터를 전송해야하는 웹 응용 프로그램을 작성하고 있습니다. 이 데이터는 웹 응용 프로그램의 다른 스크립트에서 보낼 수 있습니다. 예를 들어 한 사용자가 서버를 변경하면 다른 사용자에게이를 알립니다.연결된 사용자와 유닉스 소켓간에 프록시로 TCP 서버 스레딩
내 생각에 유닉스 소켓 (사용자 #ID를 기반으로하는 소켓으로의 경로)을 사용하여 해당 사용자의 데이터를 전송합니다 (웹 응용 프로그램 스크립트는이 소켓에 연결하여 데이터를 작성합니다). 두 번째 부분은 사용자 연결을 허용하고 TCP 소켓 연결을 통해 유닉스 소켓에서 사용자로 데이터를 전송하는 ThreadingTCPServer입니다. 중고
- 는 TCP 서버
- 장고 스크립트 개방 unixsocket에 연결하여 데이터를 기록 : 여기 워크 플로입니다.
- TCP 서버가 유닉스 소켓에서 데이터를 읽어서 사용자와의 연결을 열어 보냅니다. 당신은 일반적으로 내 생각에 대해 생각
1.What : 나는 희망
당신은 그래서, 나는이 개 질문이 내 생각 :
을 이해? 그것은 좋은 해결책인가 나쁜가? 모든 추천을 환영합니다.
2. 여기 내 코드입니다.
import SocketServer
import socket
import netstring
import sys, os, os.path
import string
import time
class MyRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
try:
print "Connected:", self.client_address
user = self.request.recv(1024).strip().split(":")[1]
user = int(user)
self.request.send('Welcome #%s' % user)
self.usocket_path = '/tmp/u%s.sock' % user
if os.path.exists(self.usocket_path):
os.remove(self.usocket_path)
self.usocket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
self.usocket.bind(self.usocket_path)
self.usocket.listen(1)
while 1:
usocket_conn, addr = self.usocket.accept()
while 1:
data = usocket_conn.recv(1024)
if not data: break
self.request.send(data)
break
usocket_conn.close()
time.sleep(0.1)
except KeyboardInterrupt:
self.request.send('close')
self.request.close()
myServer = SocketServer.ThreadingTCPServer(('', 8081), MyRequestHandler)
myServer.serve_forever()
나는 예외이 너무 복잡
File "server1.py", line 23, in handle
self.usocket.listen(1)
File "<string>", line 1, in listen
error: (102, 'Operation not supported on socket')
두 번째 질문이 해결되었습니다. UNIX 소켓에서는 socket.SOCK_DGRAM 대신 socket.SOCK_STREAM을 사용해야합니다. –