python服务器主动推送消息,python 利用websocket实现服务器向客户端推送消息(tornado.websocket.WebSocketHandler)...

废话很少说,直接上代码,详见代码注释.前端

class UpdateWebSocket(WebSocketHandler,_AccountBaseHandler):

"""websocket代替轮询获取更新的数据

"""

# 保存链接用户,用于后续推送消息

all_shop_admins = set()

#创建链接的时候,把用户保存到字典里面,用于后续推送消息使用

def open(self):

print("new client opened")

# 初始化

all_shop_admins.add(self)

# 关闭链接的时候须要清空链接用户

def on_close(self):

all_shop_admins.remove(self)

# 项目中调用方法UpdateWebSocket.send_demand_updates(message)来给用户发送消息

@classmethod

def send_demand_updates(cls,message):

# 给第一个用户推送消息

all_shop_admins[0].write_message(message)

def on_message(self,message):

# 接收客户端发来的消息

logging.info("got message %r", message)

# 检查跨域请求,容许跨域,则直接return True,不然自定义筛选条件

def check_origin(self, origin):

parsed_origin = urllib.parse.urlparse(origin)

return parsed_origin.netloc.endswith(".carrefourzone.senguo.cc")

# 可能会遇到的问题:

python

1.跨域请求

WebSocket connection to 'ws://carrefourzone.senguo.cc:9887/updatewebsocket' failed: Error during WebSocket handshake: Unexpected response code:403

出现上面这个问题的缘由是由于我检查了跨域请求,在跨域请求里面要求url必须以".carrefourzone.senguo.cc"结尾,可是实际上个人请求url须要带端口号9887,因此websocket的server并不承认,

也就拒绝了链接,这里必定要注意理解

2.服务器如何经过websocket推送消息给客户端

如上面的代码,咱们须要在UpdateWebSocket中定义由classmethod修饰的函数方法,好比我定义的send_demand_updates,而后在服务器的其余地方调用方法UpdateWebSocket.send_demand_updates(message)来给用户发送消息.

至于前端怎么实现的.能够查看个人另一篇文章:(https://blog.csdn.net/cm786526/article/details/79939687)web

你可能感兴趣的:(python服务器主动推送消息)