Los*_*les 6 python sockets queue multiprocessing
我正在学习使用HTML5 WebSockets,作为其中的一部分,我正在用Python编写服务器,所以我可以知道它们如何工作的细节.我前几天创建了一个非常好的,但是我想扩展它以便它支持多个端点,每个端点都是一个可以处理websocket客户端的不同"服务".
目前,我的实现适用于产生进程等(我使用多处理而不是线程,因为我读到线程在CPython中并不是真正的多线程,这就是我认为我正在使用的(Ubuntu 12.04上的默认安装)),但是我无法将收到的客户端套接字发送到服务进程.
这是我发送它们的方式(这是循环运行):
try:
#get a new client
conn, addr = server.accept()
print "Client connected from", addr
request = conn.recv(4096)
response, close, service = self.handshake(request)
conn.send(response)
if close:
print "Invalid request from", addr
conn.close()
continue
client = WebSockets.WebSocketClient(conn, addr)
service.clientConnQueue.put(client)
Run Code Online (Sandbox Code Playgroud)
'server'是一个侦听传入连接的套接字.握手方法负责验证其请求并确定将客户端放入哪个服务进程.'response'是要发送的http响应,如果出现错误,'close'为True,'service'是继承自multiprocessing.Queue的类.WebSocktes.WebSocketClient是存储我的发送和接收实现的地方,它基本上用作套接字的包装器.
'clientConnQueue'的创建方式如下:
class Service(multiprocessing.Process):
"""Base class for all services."""
def __init__(self, manager):
multiprocessing.Process.__init__(self)
self.manager = manager
self.clientConnQueue = self.manager.Queue()
self.shutdownFlag = multiprocessing.Event()
Run Code Online (Sandbox Code Playgroud)
manager是一个multiprocessing.Manager()
我尝试将客户端放在clientConnQueue中时得到的错误如下:
File "./WebSocketServer.py", line 183, in <module>
main()
File "./WebSocketServer.py", line 180, in main
server.runServer()
File "./WebSocketServer.py", line 67, in runServer
service.clientConnQueue.put(client)
File "<string>", line 2, in put
File "/usr/lib/python2.7/multiprocessing/managers.py", line 758, in _callmethod
conn.send((self._id, methodname, args, kwds))
TypeError: expected string or Unicode object, NoneType found
Run Code Online (Sandbox Code Playgroud)
然后我在接收方得到了一个破损的管道错误.
当我使用multiprocessing.Queue发送连接时我得到了同样的错误,我认为将其更改为由管理员创建的队列将解决问题.但是,它似乎完全相同的实现.
显然,这不是人们应该将这样的事情发送到正在运行的进程的方式,那么将不可序列化的对象发送到进程的正确方法是什么?
将套接字传递给另一个进程并不是一件小事。例如,看看这个问题: Can I open a socket and pass it to another process in Linux
不管怎样,操作系统进程或线程并不是你真正想要的实现 websocket 服务器,因为内存开销很大。看看非阻塞套接字的smth...例如,Tornado http://www.tornadoweb.org/documentation/websocket.html
| 归档时间: |
|
| 查看次数: |
3501 次 |
| 最近记录: |