Python 线程化TCP服务器: "名称或服务未知
我正在开发一个多线程的TCP服务器,用来和同一台机器上的PHP应用进行通信。这个服务器的目的是接收来自PHP应用的请求,并使用ffmpeg在本地转换一些视频。
以下是代码:
# -*- coding: utf-8 -*-
import os
import socket
import threading
import logging.config
import SocketServer, time
from queuev2 import QueueServer
logging.basicConfig(format='[%(asctime)s.%(msecs).03d] %(message)s', datefmt='%Y-%m-%d %H:%M:%S', filename=os.path.join(os.path.dirname(os.path.realpath(__file__)), 'converter.log'), level=logging.INFO)
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request.recv(1024)
cur_thread = threading.current_thread()
response = "{}: {}".format(cur_thread.name, data)
videoPool.add(data)
print "Output! %s" % data
self.request.sendall(response)
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass
if __name__ == "__main__":
logging.info("Initializing...")
videoPool = QueueServer()
HOST, PORT = "localhost", 6666
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
# Start a thread with the server -- that thread will then start one
# more thread for each request
server_thread = threading.Thread(target=server.serve_forever)
# Exit the server thread when the main thread terminates
server_thread.daemon = True
server_thread.start()
print("Server loop running in thread: %s" % server_thread.name)
# "Groundhog day" time
while True:
time.sleep(999)
pass
#server.shutdown()
在我的开发笔记本上,这个程序运行得很好,但在服务器上我遇到了以下错误:
Traceback (most recent call last):
File "server.py", line 31, in <module>
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
File "/usr/lib/python2.7/SocketServer.py", line 408, in __init__
self.server_bind()
File "/usr/lib/python2.7/SocketServer.py", line 419, in server_bind
self.socket.bind(self.server_address)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.gaierror: [Errno -2] Name or service not known
我猜这可能和我使用的端口(6666)有关,但我尝试了其他端口也没有成功。请问Unix域套接字在这里有用吗?能给我一个例子吗?
1 个回答
0
确实是个端口的问题。
Unix域套接字解决了这个问题。