nodejs python 通信_Nodejs环境实现socket通信过程解析
结构:
socket是应用层和传输层的桥梁。(传输层之上的协议所涉及的数据都是在本机处理的,并没进入网络中)
涉及数据:
socket所涉及的数据是报文,是明文。
作用:
建立长久链接,供网络上的两个进程通信。
nodejs环境下的简单通信。
代码:
serve:
// 1 引入模块
const net = require('net');
// 2 创建服务器
let clientArr = [];
const server = net.createServer();
// 3 绑定链接事件
server.on('connection',(person)=>{
console.log(clientArr.length);
// 记录链接的进程
person.id = clientArr.length;
clientArr.push(person);
person.setEncoding('utf8');
// 客户socket进程绑定事件
person.on('data',(chunk)=>{
console.log(chunk);
clientArr.forEach((val)=>{
// 数据写入全部客户进程中
val.write(chunk);
})
})
person.on('close',(p1)=>{
clientArr[p1.id] = null;
} )
person.on('error',(p1)=>{
clientArr[p1.id] = null;
})
})
server.listen(800);
client:
// 1 引入模块
const net = require('net');
const readline = require('readline');
// 2 创建套接字和输入输出命令行
let rl = readline.createInterface({
// 调用std接口
input:process.stdin,
output:process.stdout
})
let client = new net.Socket();
// 3 链接
client.connect(800,'localhost');
client.setEncoding('utf8');
client.on('data',(chunk)=>{
})
client.on('error',(e)=>{
console.log(e.message);
})
// 绑定输io流事件,获取输入输出字符
rl.on('line',(mes)=>{
client.write(mes);
})
小结:
server端:绑定连接事件 --> 在连接事件中管理客户端进程对象(1,把添加到数组中 2,处理客户端发来的数据)-->开启端口监听请求 。
client端:创建连接服务器用的套接字 --> 连接服务器 。
socket建立的连接是长久连接。而应用层的http协议是3次握手协议,是短连接。
socket工作原理和http类似,只是不规定断开连接的时间。可以把http理解成一个人办一件事情就跑一次连接流程。socket理解成只跑一次连接流程,只到把所有的事情都做完了才回去。
Socket主要作用是实现客户端与服务端的实时通信保持通话,它不像ajax请求,每次对话完成后都会把连接断开。Socket通信在
Node.js中实现其实很简单,没有想象中复杂,基本上只要懂得监听(.on)和推送(.emit)消息,即能实现Socket通信。
Socket服务端
在服务端使用Socket,需先引入socket.io模块,该模块详细文档可参考https://socket.io/:
cnpm install socket.io
服务端实例代码如下:
var server = app.listen(8081, "127.0.0.1", function() {
var host = server.address().address;
var port = server.address().port;
});
/********************socketIO********************/
var io = require('socket.io').listen(server);
// 建立连接
io.sockets.on('connection', function(socket) { //此处每个回调socket就是一个独立的客户端,通常会用一个公共列表数组统一管理
// 连接断开,如关闭页面时触发
socket.on('disconnect', function() {
console.log('已断开链接');
});
// 监听客户端发送的消息
socket.on('clientmessage', function(data) {
//推送给除自己外其他所有用户的消息,类似于广播
socket.broadcast.emit('message', {
text: '你的朋友上线了'
});
});
//发送给自己的消息
socket.emit('message', {
text: '你上线了'
});
});
上例中实现了4步:
1. 建立连接并添加断开连接监听。
2. 建立clientmessage监听,当客户端发来该名称的事件时,服务器向除自己外其他的用户广播事件名称为message的消息。
3.在刚建立连接时,向客户端推送事件名称为message的消息。
其中主要应用到的函数有5个:
.on('connection', function(socket){ }):与客户端建立连接时监听。
.on('disconnect', function(){ }):与客户端断开连接时监听。
.on('event-name', function(data) { }):监听客户端发来的消息。
.broadcast.emit('event-name', { }):向除自己外的所有其他用户广播消息。
.emit('event-name', { }):仅向当前连接的客户端(自己)推送消息。
(注)相关客户端的接口关联请往下看客户端的例子。
Socket客户端
客户端实例代码如下:
socketio测试
var tmp_html = '';
tmp_html += '
tmp_html += '
tmp_html += '
document.write(tmp_html);
document.close();
发送消息
var socket = io.connect('http://127.0.0.1:8081');
socket.on('message', function(data) {
console.log(data.text);
})
$("#btn").click(function() {
socket.emit('clientmessage', {
text: "hello"
});
});
客户端主要应用到的函数有2个:
.on('event-name', function(data) { }):监听服务端发来的消息。
.emit('event-name', { }):向服务端推送消息。
Socket即时通信就是那么简单,而且在连接断开时还会自动重连。还有一种实现方法就是使用net模块的套接字,可以直接查看Node.js文档。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
nodejs python 通信_Nodejs环境实现socket通信过程解析相关推荐
- ModBus(RTU TCP UDP通信)及利用socket通信(DTU)实现Modbus-RTU通信协议
目录 MODBUS-RTU 1.Modbus Slave连接串口 2.MODBUS-RTU配置环境 3.ModBus-RTU的通信代码 4.ModBus-RTU执行的方法细节,简说 MODBUS-TC ...
- 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)
文章目录 一.前言 二.Go开发环境搭建(Windows系统) 1.安装Go命令行工具 2.创建GoWorkspace目录 3.配置GOPATH环境变量 4.配置GOPROXY代理 5.安装VSCod ...
- python rtsp推流_python处理RSTP视频流过程解析
python处理RSTP视频流过程解析 这篇文章主要介绍了python处理RSTP视频流过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 py ...
- python证券_基于Python爬取搜狐证券股票过程解析
数据的爬取 我们以上证50的股票为例,首先需要找到一个网站包含这五十只股票的股票代码,例如这里我们使用搜狐证券提供的列表. 可以看到,在这个网站中有上证50的所有股票代码,我们希望爬取的就是这个包含股 ...
- python爬取网页数据流程_基于Python爬取fofa网页端数据过程解析
FOFA-网络空间安全搜索引擎是网络空间资产检索系统(FOFA)是世界上数据覆盖更完整的IT设备搜索引擎,拥有全球联网IT设备更全的DNA信息.探索全球互联网的资产信息,进行资产及漏洞影响范围分析.应 ...
- C#和Python的Socket通信
目录 1.项目说明 2.Socket通信 2.1C#实现socket通信 2.2python实现socket通信 3.结果 3.1C#socket通信结果 3.2python和C# socket通信结 ...
- python udp创建addr_python高级:8.socket通信part1
0.前言 如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步.你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负众望.谢谢!!! 1.前提 基于win10专业版64位系统+64 ...
- python socket udp并发_Python进阶----UDP协议使用socket通信,socketserver模块实现并发
Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:
- python安卓开发实例_python服务器与android客户端socket通信实例
本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...
最新文章
- 硬核科普:到底啥是云原生?
- 大话数据结构书籍及配套源码
- sublimeText3安装package control和禁止弹出更新下载弹窗
- Numpy-查看数组的属性
- java读取gradle属性,Spring Boot获取Gradle中包的属性
- MAC OS X 10.9.X下用命令行开启SSD trim的方法汇总
- 《Python Cookbook 3rd》笔记汇总
- python \__call__
- DeepMind新突破:雷神之锤3战场AI夺旗,团战胜率超过人类
- 喝酒的规矩(是男人必看必顶,女人可不看直接顶)
- kafka 生产和消费信息入门
- 黑苹果电池电量补丁_【黑苹果】用一次实战记录电池热补丁的编写方法
- 添加附件测试的测试点
- 云计算概念的基本介绍,云计算的特点主要有哪些?
- unity3d ios 应用闪退 variables may not be available
- gimtehseet工时管理系统介绍
- 计算机表格用计算公式百分百,excel表格怎么算数据的阳性比率-计算机一级用excel表格计算增长比例该怎么算?...
- 红米note2位置服务器,红米Note2
- CUDA+VS2017+win环境下 cuda工程环境搭建(解决标识符未定义或申明)
- 当显示内容过多时的滚屏类Container.java