httpServer来代理WebSocket通信

简介: 单工:数据只支持在一个方向传输,即单向,在同一时间内只有一方能够接受&发送信息;半双工:允许数据能够双向传输,但是,在某一时刻只允许数据在一个方向传输。类似切换方向的单工通信。http就是半双工通信,先有请求,再有响应;全双工:允许数据同时都能双向传输,类似两个单工通信的结合,要求client & server都有独立接收和发送的能力,在任意时刻都能接收&发送信息,socket就是全双工通信;

1、简介
1.1、通信方式

单工:数据只支持在一个方向传输,即单向,在同一时间内只有一方能够接受&发送信息;
半双工:允许数据能够双向传输,但是,在某一时刻只允许数据在一个方向传输。类似切换方向的单工通信。http就是半双工通信,先有请求,再有响应;
全双工:允许数据同时都能双向传输,类似两个单工通信的结合,要求client & server都有独立接收和发送的能力,在任意时刻都能接收&发送信息,socket就是全双工通信;

1.2、websocket
websocket本质是一种网络应用层协议,建立在单个TCP连接上的全双工模式,用来弥补了http协议在持续双向通信能力上的不足,允许服务端与客户端之间可以双向主动推送数据。
特点:

与http协议有着良好的兼容性,默认端口80(协议标识为ws)或者443(加密传输,协议标识为wss);
建立连接的握手阶段采用的是http协议,根据这个特性,可以在链路中间引入http代理服务器;
数据格式轻量,性能开销小,通信效率高(只要建立连接后,就可以无限收发报文);
报文内容可以是文本,也可以是二进制数据;
没有同源的约束,不存在跨域一说,客户端可以与任意服务器通信(前提是服务器能应答);
对外暴露的URL为:ws://${domain}:80/${path},或者wss://${domain}:443/${path}

2、搭建demo
2.1、server
采用ws库快速构建一个websocket server,监听connection事件,收到消息并且打印后,立马发送给客户端
const ws = require('ws');

let wsServer = new ws.Server({

port: 3000,
host:'127.0.0.1',
path:'/websocket'

});

wsServer.on('connection', function (server) {

console.log('client connected');

server.on('message', function (message) {
    console.dir(message)
    console.log(message.toString());
    server.send(`hello:${message}`)
});

});
复制代码
2.2、client
快速搭建一个websocket client,利用http-server在目录下启动,并且访问该页面
<!DOCTYPE html>

<html>
<head>
    <title>websocket demo</title>
</head>
<body>
    <h1></h1>
    <br>
    <input type='text' id='sendText'>
    <button onclick='send()'>send</button>
</body>

相关文章
|
6月前
|
前端开发 网络协议 JavaScript
在Spring Boot中实现基于WebSocket的实时通信
在Spring Boot中实现基于WebSocket的实时通信
|
2月前
|
Kubernetes Cloud Native JavaScript
为使用WebSocket构建的双向通信应用带来基于服务网格的全链路灰度
介绍如何使用为基于WebSocket的云原生应用构建全链路灰度方案。
|
6月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
240 6
|
6月前
|
安全 数据安全/隐私保护 UED
优化用户体验:前后端分离架构下Python WebSocket实时通信的性能考量
【7月更文挑战第17天】前后端分离趋势下,WebSocket成为实时通信的关键,Python有`websockets`等库支持WebSocket服务。与HTTP轮询相比,WebSocket减少延迟,提高响应。连接管理、消息传输效率、并发处理及安全性是性能考量重点。使用WebSocket能优化用户体验,尤其适合社交、游戏等实时场景。开发应考虑场景需求,充分利用WebSocket优势。
177 3
|
6月前
|
前端开发 Python
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
【7月更文挑战第18天】在Python的Flask框架中,结合Flask-SocketIO库可轻松实现WebSocket实时通信,促进前后端分离项目中的高效交互。示例展示了一个简单的聊天应用:Flask路由渲染HTML,客户端通过Socket.IO库连接服务器,发送消息并监听广播。此方法支持多种实时通信协议,适应不同环境,提供流畅的实时体验。
119 3
|
6月前
|
JavaScript 前端开发 UED
WebSocket在Python Web开发中的革新应用:解锁实时通信的新可能
【7月更文挑战第16天】WebSocket是实现Web实时通信的协议,与HTTP不同,它提供持久双向连接,允许服务器主动推送数据。Python有多种库如websockets和Flask-SocketIO支持WebSocket开发。使用Flask-SocketIO的简单示例包括定义路由、监听消息事件,并在HTML中用JavaScript建立连接。WebSocket提高了实时性、减少了服务器压力,广泛应用于聊天、游戏等场景。
73 1
|
6月前
|
移动开发 前端开发 网络协议
Python Web实时通信新纪元:基于WebSocket的前后端分离技术探索
【7月更文挑战第16天】WebSocket增强Web实时性,Python借助Flask-SocketIO简化实现。安装`flask`和`flask-socketio`,示例展示服务器端接收连接及消息并广播响应,前端HTML用Socket.IO库连接并监听事件。WebSocket开启双向通信新时代,助力动态Web应用开发。
71 1
|
5月前
|
网络协议 Go
[golang]gin框架接收websocket通信
[golang]gin框架接收websocket通信
135 0
|
6月前
|
网络协议 Java API
如何在Java中实现WebSocket通信
如何在Java中实现WebSocket通信
|
6月前
|
监控 前端开发 网络协议
如何使用Spring Boot实现WebSocket通信
如何使用Spring Boot实现WebSocket通信

相关实验场景

更多