websocket初步认知

算法栖汐人
• 阅读 2204

什么是websocket

Websocket是一个持久化的协议,改协议定义了一个 API 用以在browser和server建立一个 socket 连接。WebSocket是建立在http的基础上,复用了HTTP的握手环节,握手成功后经过协商在走Websocket协议格式的数据。

websocket初步认知

websocket应用场景

websocket可以用来实现弹幕,协同编辑,在线社交聊天等功能。因为websocket的兼容性问题,如下所示,只支持ie11+
websocket初步认知
所以还有其它几种方案作为兼容性问题的补充,常见的比如说轮训方案(浏览器定时重复向服务器发送http请求,服务器相应,客户端得到数据后,将其显示出来,不断的重复这一过程 )、长轮询(客户端打开了一个到服务端的 HTTP 连接直到返回响应数据)。

websocket使用

//server
let WSServer = require('ws').Server;
let wsServer = new WSServer({ port: 8888 });
wsServer.on('connection', function (socket) {
    console.log('客户端已经连接');
    //监听客户端发过来的ith
    socket.on('message', function (message) {
        console.log(message);
        socket.send(' from  server:' + 'hello');
    });
});
//client
 let socket = new WebSocket('ws://localhost:8888');
    socket.onopen = function () {
        socket.send('from client hello');
    }
    socket.onmessage = function (event) {
        console.log(event.data);
    }

输出结果
websocket初步认知
说明 上面是一个简单的示例,建立连接并发送数据。
在真实项目应用中,会借助于第三方成熟的库,例如Socket.IO(包括了brower和server(node)的实现代码),支持跨平台,根据浏览器兼容自动从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,简单使用举例如下所示。

//server
var express = require('express');
var path = require('path');
var app = express();

app.get('/', function (req, res) {
    res.sendFile(path.resolve('index.html'));
});

var server = require('http').createServer(app);
var io = require('socket.io')(server);

io.on('connection', function (socket) {
    console.log('客户端已经连接');
    socket.on('message', function (msg) {
        console.log(msg);
        socket.send('sever:' + msg);
    });
});
server.listen(80);
//client
<script src="/socket.io/socket.io.js"></script>
var socket = io.connect('/');
socket.on('connect',function(){
   //客户端连接成功后发送消息'welcome'
   socket.send('welcome');
});
//客户端收到服务器发过来的消息后触发
socket.on('message',function(message){
   console.log(message);
});

说明 除了上面演示中的功能外,Socket.IO还支持命名空间,房间的划分,也支持指定范围的广播。

点赞
收藏
评论区
推荐文章
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java 实现websocket
最近了解了下websocket和socket这个东西,说不得不来说下为何要使用WebSocket,和为何不用http。为何需要WebSocket?HTTP协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。这种通信模型有一个弊端:HTTP协议无法实现服务器主
Wesley13 Wesley13
3年前
Java WebSocket
本示例的目的,就是通过webSocket向客户端(浏览器端)发送消息.一、什么是WebSocket  WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(fullduplex)通信——允许服务器主动发送信息给客户端。WebSocket通信协议于2011年被IETF(https://www.oschina.n
Stella981 Stella981
3年前
Spring Websocket 中文文档 (spring5)
这部分参考文档包括对Servlet堆栈的支持,包括原始WebSocket交互的WebSocket消息传递,通过SockJS的WebSocket仿真,以及通过STOMP作为WebSocket上的子协议的pubsub消息传递。4.1。介绍WebSocket协议RFC6455(https://www.oschina.net/action/G
Stella981 Stella981
3年前
Noark入门之WebSocket
支持WebSocket吗?你还在为H5的前端链接头疼吗?你还在了解WebSocket的握手协议吗?WebSocket有没有粘包概念啊?之前忘了说了,很不好意思,Noark在原来Tcp端口上实现了WebSocket协议的判定与处理,实现了Socket与WebSocket共存的效果还记得Socket链接服务器那一串暗号吗?那之前是为Flash
Stella981 Stella981
3年前
KBEngine使用Nginx反向代理支持WSS协议
KBEngine使用Nginx反向代理支持WSS协议目前很多H5的游戏需要用https和wss协议,特别是腾讯微信小游戏必须走https协议,而https协议的网站必须用websocket的wss协议才能实现连接.具体Nginx怎么实现的websocket就不再具体介绍,网络上有很多相关的文章.
Stella981 Stella981
3年前
HTTP协议与WebSocket协议对比
1.HTTP从根本上讲,HTTP还是半双工的协议,也就是说,在同一时刻流量只能单向流动:客户端向服务器发送请求(单向),然后服务器响应请求(单向)。2.WebSocketWebSocket是一种自然的全双工、双向、单套接字连接。使用WebSocket,一旦建立连接,服务器与客户端可以随时发送消息。与HTTP轮询不同,WebSocket只发有一个请
Stella981 Stella981
3年前
Kurento协议
Kurento媒体服务器可以被两种外部Kurento客户端控制,如Java或JavaScript。这些客户端使用Kuernto协议来和KMS通信。Kurento协议是基于WebSocket协议,并使用了JSONRPCV2.0消息来提交请求和发送响应。JSONRPC消息格式Kurento协议使用JSONRPCV2.0编码它的消
Wesley13 Wesley13
3年前
HTTP教程2
客户端和服务器端一旦握手协商成功接建立连接,端点之间可以基于HTTP/2协议传递交换帧数据了。一。帧通用格式下图为HTTP/2帧通用格式:帧头负载的比特位通用结构:|Length(24)
天翼云CDN全站加速产品对websocket协议的支持
天翼云全站加速产品支持对webscoket协议和http/https协议可同时加速,即同一个域名可以既有http/https协议,又有websocket加速,您无需拆分域名,使用全站加速产品就可以实现对域名下http/https协议的应用和websocket协议的应用同时加速。全站加速节点会自动识别客户端与全站加速边缘节点通信使用的协议,自动切换协议。通常情况下,websocket协议的应用多为动态业务,对实时性要求很高,全站加速的动态探测选路能力可以为websocket应用选择最快的回源路径,提升websocket业务的访问效果。