WebSocket实时应用

在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果,但是依然有很多缺点,缺点就不在这里说了,感兴趣的小伙伴可以自行查阅一下。现在让我们回忆一下,我们有没有想过,是否有一种技术,服务器可以主动将数据推送给客户端进行渲染,而不再是客户端向服务器发出请求等待返回结果呢?接下来,让我们一起了解weboskcet。

websocket是HTML5规范的一个部分,它借鉴了socket的思想,实现了浏览器与服务器全双工通信,达到了即时通信的效果。websocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程,避免服务器频繁打开多个HTTP连接,从而能更好的节省服务器资源和带宽,提高工作效率与资源利用率

websocket的通信规范,首先浏览器通过HTTP协议发出websocket的连线请求,服务器进行响应,这个过程称为握手,握手完成后,客户端和服务器之间建立一个类似TCP的连接,使用websocket协议,从而实现它们之间的通信。

客户端的简单示例

// 创建websocket

var ws = new WebSocket("ws://www.example.com");

// 连接成功时触发

ws.onopen = function(e) {

console.log("Connectiong open ...");

// 发送消息

ws.send("Hello WebSocket");

};

// 接收消息时触发

ws.onmessage = function(e) {

console.log("Received Message: " + e.data);

ws.close();

};

// 关闭连接时触发

ws.onclose = function(e) {

console.log("Connection closed");

};

// 出现错误时触发

ws.onerror = function(e) {

console.log("error");

};

服务端的简单示例

创建websocket服务端

from tornado.websocket import WebSocketHandler

class wsHandler(WebSocketHandler):

保存连接的用户,用于后续推送消息

connect_users = set()

已与客户端建立连接

def open(self):

print("开启WebSocket opened")

self.connect_users.add(self)

关闭客户端连接

def on_close(self):

self.connect_users.remove(self)

接收到消息

def on_message(self, message):

self.write_message("接收到客户端的消息:{}".format(message))

所有用户发送消息

@classmethod

def send_demand_updates(cls, message):

使用@classmethod可以使类方法在调用的时候不用进行实例化

给所有用户推送消息(此处可以根据需要,修改为给指定用户进行推送消息)

for user in cls.connect_users:

user.write_message(message)

允许WebSocket的跨域请求

def check_origin(self, origin):

return True

if name == "main":

调用

wsHandler。send_demand_updates("服务端发送给客户端的消息")

相关推荐
啊阿狸不会拉杆6 小时前
《计算机网络-自顶向下方法》5.4 ISP之间的路由选择:BGP 读书笔记
网络·计算机网络·接口隔离原则
Delite8028 小时前
摆脱实验室束缚:便携式卡尔费休微量水分检测技术与现场应用解析
大数据·网络·人工智能
ACP广源盛139246256738 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
明月_清风8 小时前
MCP vs ACP vs LSP:AI 时代三大协议的「三足鼎立」
人工智能·网络协议·agent
ACP广源盛139246256739 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
我爱cope9 小时前
【计算机网络 | 传输层3:TCP 协议概述:面向连接、可靠传输到底意味着什么?】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
OIDCAT10 小时前
国产USB转千兆网卡芯片CH398-RTL8153国产替代实测与选型
网络·嵌入式硬件·智能硬件·国产芯片·usb转千兆网卡
M--Y12 小时前
Docker数据持久化与网络架构
网络·docker·架构
myy-learn13 小时前
30-HTTP协议
网络·网络协议·http