websocket 占用 端口_使用Bottle实现websocket和http同端口复用

本文介绍了如何使用Python的Bottle框架,在同一个端口上同时运行WebSocket和HTTP服务。通过创建自定义的Bottle服务器类,并结合WebSocketHandler,实现了WebSocket的`/wspost`路由和HTTP的`/`、`/datapost`路由。WebSocket路由用于处理客户端的消息接收和发送,HTTP路由则包含了一个简单的GET和POST接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值