vue websocket的使用_消息通讯——Websocket

说起即时通讯大家应该都听过,像各种聊天软件用到的即时通讯技术是最多的。另外开发过程中实现消息推送最传统的做法就是轮询,即按照特定时间间隔由浏览器对服务器发送请求,以获取最新消息,这种传统模式带来很明显的缺点,即浏览器需要不断的向服务器发送请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样回浪费很多带宽等资源。

这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

WebSocket是一种在单个TCP连接上进行全双工通信的协议。

WebSocket使得客户端和服务端之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

websocket运用场景:

  1. 即时通讯:多媒体聊天;
  2. 互动游戏:多人游戏;
  3. 协同合作:开发人员代码管理工具;
  4. 动态数据报表:类似通知变更;
  5. 实时工具:如导航,实时查询工具等也可使用。

原理

WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接。

首先,WebSocket连接必须由浏览器发起,因为请求协议是一个标准的HTTP请求,如下所示:

GET ws://localhost:8181 HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Origin: http://localhost:8181
Sec-WebSocket-Key: client-random-string
Sec-WebSocket-Version: 13

该请求和普通的HTTP请求有几点不同:

  1. GTE请求的地址不是类似/path/,而是以ws://开头的地址;
  2. 请求头Upgrade:websocket和Connection: Upgrade表示这个连接将要被转换为WebSocket连接;
  3. Sec-WebSocket-Key是用于标识这个连接,并非用于加密数据;
  4. Sec-WebSocket-Version指定了WebSocket的协议版本。

随后服务端如果接收该请求,就会返回响应,如下所示:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: server-random-string

该响应代码101表示本次连接的HTTP协议即将被更改,更改后的协议就是Upgrade: websocket指定的WebSocket协议。

为了创建WebSocket连接,需要通过浏览器发送请求,然后服务器端响应,这个过程通常称为“握手”。

版本号和子协议规定了双方能理解的数据格式,以及是否支持压缩等等。如果仅使用WebSocket的API,就不需要关心这些。

现在,一个WebSocket连接就建立成功,浏览器和服务器就可以随时发送消息给对方。消息有两种,一种是文本,一种是二进制数据。通常,我们可以发送JSON格式的文本,这样处理起来方便些。

这里有个比较有意思的点,为什么WebSocket连接可以实现全双工通信而HTTP连接不行呢?实际上HTTP协议是建立在TCP协议之上的,TCP协议本身就实现了全双工通信,但是HTTP协议的请求 - 应答机制限制了全双工通信。WebSocket连接建立以后,其实只是简单规定了以下:“接下来咱们通信不用HTTP协议了,直接互发数据吧”。

HTTP协议与WebSocket协议对比:

2f11b1404d6a19704e5e739965a7aa65.png

WebSocket目前支持两种统一资源标识符ws和wss,类似于HTTP和HTTPS。

其他特点:

  1. 建立在TCP协议之上,服务器端的实现比较容易;
  2. 与HTTP协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用HTTP协议,因此握手时不容易屏蔽,能通过各种HTTP代理服务器;
  3. 数据格式比较轻量,性能开销小,通信高效;
  4. 可以发送文本,也可以发送二进制数据;
  5. 没有同源限制,客户端可以与任意服务器通信;
  6. 协议标识符是ws(如果加密,则为wss),服务器网址就是URL。
ws://example.com:80/some/path

5a755b2f6735310c310386cdeb5bdf80.png

浏览器支持:

目前支持WebSocket的主流浏览器如下:

  • Chrome;
  • Firefox;
  • IE >= 10;
  • Sarafi >= 6;
  • Android >= 4.4;
  • IOS >= 8。

客户端实现:

vue文件

57334c1ecfcf276a0ab53a9f791ce582.png

服务器端实现:

server.js

821e43965533844b41b4e70e6b5b2c92.png

这里客户端是node服务器,仅是一个简单的示例。

以上就是相关WebSocket技术知识的整理,希望对大家有用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue WebSocket发送接收消息的过程相对简单。首先,我们需要在Vue项目中安装WebSocket的依赖包。可以使用npm或者yarn来安装,具体命令如下: ```bash npm install vue-native-websocket ``` 然后,在Vue组件中引入WebSocket,并在数据部分定义WebSocket连接以及消息的相关数据。 ```javascript import VueNativeSock from 'vue-native-websocket' export default { data() { return { socket: { isConnected: false, message: '' } } }, created() { this.$options.sockets.onmessage = (messageEvent) => { this.socket.message = messageEvent.data } this.$options.sockets.onopen = () => { this.socket.isConnected = true } this.$options.sockets.onclose = () => { this.socket.isConnected = false } }, // ... } ``` 其中,`this.$options.sockets.onmessage`用来监听消息接收事件,`this.$options.sockets.onopen`用来监听连接成功事件,`this.$options.sockets.onclose`用来监听连接关闭事件。 接下来,我们需要在组件中定义发送消息的方法。通过调用`this.$socket.send()`方法来发送消息。 ```javascript export default { // ... methods: { sendMessage() { if (this.socket.isConnected) { this.$socket.send('Hello, WebSocket!') } } } } ``` 上述代码中,我们通过`this.$socket.send()`方法来发送消息WebSocket服务器,其中参数是要发送的消息内容。 最后,在组件的模板中展示接收到的消息以及提供发送消息的按钮。 ```html <template> <div> <p>{{ socket.message }}</p> <button @click="sendMessage">发送消息</button> </div> </template> ``` 通过上述配置,我们就可以在Vue项目中使用WebSocket进行消息的发送和接收了。当WebSocket连接成功时,可以发送消息;当WebSocket接收到消息时,可以在界面上展示出来。 ### 回答2: Vue使用WebSocket发送和接收消息有以下几个步骤: 1. 首先,在Vue项目中安装一个WebSocket客户端库,比如`vue-native-websocket`或`vue-socket.io`。 2. 在Vue组件中引入WebSocket库,并创建一个WebSocket实例。可以在`created`或`mounted`生命周期钩子函数中进行。 ``` import VueNativeSock from 'vue-native-websocket'; export default { created() { Vue.use(VueNativeSock, 'ws://localhost:8080/ws', { format: 'json' }); }, }; ``` 3. 监听WebSocket的连接成功事件,并在回调函数中发送消息。 ``` export default { created() { Vue.use(VueNativeSock, 'ws://localhost:8080/ws', { format: 'json' }); this.$options.sockets.onopen = () => { this.$socket.send(JSON.stringify({ message: 'Hello WebSocket!' })); }; }, }; ``` 4. 监听WebSocket消息接收事件,并在回调函数中处理接收到的消息。 ``` export default { created() { Vue.use(VueNativeSock, 'ws://localhost:8080/ws', { format: 'json' }); this.$options.sockets.onmessage = (event) => { const message = JSON.parse(event.data); console.log(message); }; }, }; ``` 5. 可以使用Vue响应式数据来实时更新页面上的内容,比如在接收到消息后更新页面中的某个变量或列表。 ``` export default { data() { return { messages: [], }; }, created() { Vue.use(VueNativeSock, 'ws://localhost:8080/ws', { format: 'json' }); this.$options.sockets.onmessage = (event) => { const message = JSON.parse(event.data); this.messages.push(message); }; }, }; ``` 通过以上步骤,我们就可以在Vue中实现WebSocket消息的发送和接收。当WebSocket连接成功后,可以通过`send`方法发送消息,同时可以监听`onmessage`事件来接收消息,并做相应的处理。 ### 回答3: Vue.js 是一个用于构建用户界面的渐进式JavaScript 框架,它可以很方便地与WebSocket 结合使用来实现消息的发送和接收。 在Vue.js 中使用WebSocket,首先要创建WebSocket 实例,并指定连接的URL。可以在Vue组件的created生命周期钩子中创建WebSocket 实例,并使用onmessage 事件监听接收到的消息。例如: ```javascript created() { this.socket = new WebSocket('ws://example.com'); this.socket.onmessage = (event) => { const message = event.data; console.log('Received message:', message); // 其他逻辑处理... }; }, ``` 在发送消息时,可以在组件的方法中调用WebSocket 实例的send()方法来发送消息。例如: ```javascript methods: { sendMessage() { const message = 'Hello, WebSocket!'; this.socket.send(message); console.log('Sent message:', message); // 其他逻辑处理... } }, ``` 在Vue组件的模板中,可以绑定按钮的点击事件来调用sendMessage() 方法。 ```html <button @click="sendMessage">发送消息</button> ``` 需要注意的是,WebSocket 连接是异步的,所以需要进行适当的错误处理。可以使用WebSocket实例的onerror、onclose 事件来处理连接出错和关闭连接的情况。 以上就是使用VueWebSocket 来发送和接收消息的基本方法。当然,根据具体的需求,还可以进一步封装WebSocket模块,提供更便捷的API。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值