[Python] 纯文本查看 复制代码'''
Bottle服务,绑定websocket和http服务
'''
class MyBottleServer(Bottle):
def __init__(self, ip="127.0.0.1", port=8737):
Bottle.__init__(self)
self.ip = ip
self.port = port
def __del__(self):
try:
if (self.server != None):
self.server.close_server()
except:
pass
def start_server(self):
self.server = WSGIServer((self.ip, self.port), self, handler_class=WebSocketHandler)
self.server.serve_forever()
def close_server(self):
if (self.server != None):
self.server.close()
self.server = None
def register_websocket_server(self):
@self.route('/wspost')
def handle_websocket():
wsock = request.environ.get('wsgi.websocket')
if not wsock:
abort(400, '此功能只能处理websocket')
message = ""
while True:
try:
if wsock.closed:
break
message = wsock.receive()
result = {
"flag": False,
"msg": ""
}
if message == None or message.strip() == "":
msg = u"获取websocket消息失败"
result["msg"] = msg
break
### 处理其他业务
if wsock.closed != True:
wsock.close()
break
except WebSocketError, ex:
logging.error(u"WebSocket异常信息")
logging.exception(ex)
# 如果异常报错,则断开连接
break
def register_http_server(self):
@self.route('/')
def index():
return template('Hello {{name}}!', name="xx")
@self.route('/datapost', method="POST")
def do_printform():
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'GET,POST,PUT,OPTIONS'
allow_headers = 'Referer, Accept, Origin, User-Agent'
response.headers[
'Access-Control-Allow-Headers'] = "Content-Type,Content-Length, Authorization, Accept,X-Requested-With"
response.content_type = "application/javascript; charset=utf-8"
message = request.params.get("message")
if message is None:
message = ""
try:
message = urllib.unquote(message);
except Exception, ex:
pass
##处理单据业务
time.sleep(5)
def register_error(self):
@self.error(404)
def error404(error):
return u'404'
def response_header(self):
# set cross headers
headers = {'Content-type': 'application/json'}
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'GET,POST,PUT,OPTIONS'
allow_headers = 'Referer, Accept, Origin, User-Agent'
headers['Access-Control-Allow-Headers'] = allow_headers
本文介绍了如何使用Python的Bottle框架,在同一个端口上同时运行WebSocket和HTTP服务。通过创建自定义的Bottle服务器类,并结合WebSocketHandler,实现了WebSocket的`/wspost`路由和HTTP的`/`、`/datapost`路由。WebSocket路由用于处理客户端的消息接收和发送,HTTP路由则包含了一个简单的GET和POST接口。

被折叠的 条评论
为什么被折叠?



