结构:

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通信过程解析相关推荐

  1. ModBus(RTU TCP UDP通信)及利用socket通信(DTU)实现Modbus-RTU通信协议

    目录 MODBUS-RTU 1.Modbus Slave连接串口 2.MODBUS-RTU配置环境 3.ModBus-RTU的通信代码 4.ModBus-RTU执行的方法细节,简说 MODBUS-TC ...

  2. 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)

    文章目录 一.前言 二.Go开发环境搭建(Windows系统) 1.安装Go命令行工具 2.创建GoWorkspace目录 3.配置GOPATH环境变量 4.配置GOPROXY代理 5.安装VSCod ...

  3. python rtsp推流_python处理RSTP视频流过程解析

    python处理RSTP视频流过程解析 这篇文章主要介绍了python处理RSTP视频流过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 py ...

  4. python证券_基于Python爬取搜狐证券股票过程解析

    数据的爬取 我们以上证50的股票为例,首先需要找到一个网站包含这五十只股票的股票代码,例如这里我们使用搜狐证券提供的列表. 可以看到,在这个网站中有上证50的所有股票代码,我们希望爬取的就是这个包含股 ...

  5. python爬取网页数据流程_基于Python爬取fofa网页端数据过程解析

    FOFA-网络空间安全搜索引擎是网络空间资产检索系统(FOFA)是世界上数据覆盖更完整的IT设备搜索引擎,拥有全球联网IT设备更全的DNA信息.探索全球互联网的资产信息,进行资产及漏洞影响范围分析.应 ...

  6. C#和Python的Socket通信

    目录 1.项目说明 2.Socket通信 2.1C#实现socket通信 2.2python实现socket通信 3.结果 3.1C#socket通信结果 3.2python和C# socket通信结 ...

  7. python udp创建addr_python高级:8.socket通信part1

    0.前言 如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步.你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负众望.谢谢!!! 1.前提 基于win10专业版64位系统+64 ...

  8. python socket udp并发_Python进阶----UDP协议使用socket通信,socketserver模块实现并发

    Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:

  9. python安卓开发实例_python服务器与android客户端socket通信实例

    本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...

最新文章

  1. 硬核科普:到底啥是云原生?
  2. 大话数据结构书籍及配套源码
  3. sublimeText3安装package control和禁止弹出更新下载弹窗
  4. Numpy-查看数组的属性
  5. java读取gradle属性,Spring Boot获取Gradle中包的属性
  6. MAC OS X 10.9.X下用命令行开启SSD trim的方法汇总
  7. 《Python Cookbook 3rd》笔记汇总
  8. python \__call__
  9. DeepMind新突破:雷神之锤3战场AI夺旗,团战胜率超过人类
  10. 喝酒的规矩(是男人必看必顶,女人可不看直接顶)
  11. kafka 生产和消费信息入门
  12. 黑苹果电池电量补丁_【黑苹果】用一次实战记录电池热补丁的编写方法
  13. 添加附件测试的测试点
  14. 云计算概念的基本介绍,云计算的特点主要有哪些?
  15. unity3d ios 应用闪退 variables may not be available
  16. gimtehseet工时管理系统介绍
  17. 计算机表格用计算公式百分百,excel表格怎么算数据的阳性比率-计算机一级用excel表格计算增长比例该怎么算?...
  18. 红米note2位置服务器,红米Note2
  19. CUDA+VS2017+win环境下 cuda工程环境搭建(解决标识符未定义或申明)
  20. 当显示内容过多时的滚屏类Container.java

热门文章

  1. 重新理解javascript回调函数
  2. c#完美截断字符串(中文+非中文)
  3. Android 实现选中与非选中样式效果
  4. js 全屏 退出全屏
  5. 教你配置支付宝应用网关和授权回调地址
  6. 经典回溯之火柴拼正方形
  7. vue自定义组件,插槽,自定义事件
  8. websocket使用
  9. 基于mxnet的Regression问题Kaggle比赛代码框架
  10. 1001 害死人不偿命的(3n+1)猜想 (15分)