基本信息
源码名称:Python SocketServer, threading示例
源码大小:0.79KB
文件格式:.zip
开发语言:Python
更新时间:2013-01-08
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 1 元×
微信扫码支付:1 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
Python SocketServer, threading
import SocketServer, threading, json
conn = {}
conn_lock = threading.Lock()
class ThreadingServer(SocketServer.ThreadingMixIn,\
SocketServer.TCPServer):
allow_reuse_address = True
class Handler(SocketServer.StreamRequestHandler):
def handle(self):
print "A new client connected", self.client_address
msg = json.read_stream(self.rfile)
if "!name" in msg:
name = msg["!name"]
wlock = threading.Lock()
conn_lock.acquire()
conn[name] = (wlock, self.wfile)
conn_lock.release()
print "Client registered (%s)" % name
reply = {"ok": u"registered"}
self.wfile.write(json.write(reply))
self.wfile.flush()
else:
reply = {"err": u"invalid name"}
self.wfile.write(json.write(reply))
return
self.handle_connection(name)
def handle_connection(self, name):
while True:
try:
msg = json.read_stream(self.rfile)
except:
msg = {"!close": True}
if "!close" in msg:
print "Client exits (%s): %s" %\
(name, self.client_address)
conn_lock.acquire()
if name in conn:
del conn[name]
conn_lock.release()
break
elif "!dst" in msg:
wfile = None
conn_lock.acquire()
if msg["!dst"] in conn:
wlock, wfile = conn[msg["!dst"]]
conn_lock.release()
if wfile:
wlock.acquire()
try:
wfile.write(json.write(msg))
wfile.flush()
finally:
wlock.release()
server = ThreadingServer(('', 9000), Handler)
print "JSON gateway is running!"
print "Waiting for new clients..."
server.serve_forever()