浅谈对soket的理解

定义:

网络上的两个程序通过一个双向的通信链实现数据的交换,这个链接的一端就成为Socket

它是进程通信的一种,即调用这个网络库的api函数实现分布在不同主机相关进程之间的数据交换,依照tcp/ip协议分给每个主机的网络地址,如果两个主机要进行通信,任何一个进程都要首先知道对方的网络地址,也可以说是对方的IP。

端口号用来辨别本地进程,一个本地的进程通信时,,都要占用一个端口号,不同的进程端口号不同,因为在本地进程进行之前,首先要分配一个没有被占用的端口号,。

链接:是指两个进程通信之间的链路。

实现原理:

在TCP/IP网络应用中,通信的两个进程之间的主要模式为客户/服务器端(即client/server C/S)模式,即客户端向服务器发出服务请求,服务器收到请求以后,向客户端提供相应的服务,C/S模式创建需要的两个条件:(1)网络中软硬件资源,运算能力,信息不均等,需要共享(2)连个网络进程是完全异步的,需要一种机制为通信的进程间建立关系,为两者的数据交换提供同步,这就是基于C/S模式的TCP/IP;

工作过程:

服务器启动,根据请求提供相应的服务(1)打开一通信通道,告知本地主机,它愿意在公认的某一端口接受客户请求(2)请求客户请求到达端口(3)收到客户请求,处理并发出应答信号,接收到并发出应答请求,这需要出发一个新的进程来处理这个客户请求,这个进程不需要发出应答,服务处理完成后,关闭新进程与客户端的链路(4)返回第(2)步,等待另一客户端发来请求

关闭服务器:

(1)打开一个通信通道,连接到服务器所在的主机端口号,(2)向服务器发送服务器报文,等待并接收应答,继续发送报文(3)请求结束后,关闭通道

过程总结:客户端和服务器端是不对等的,所以两端的代码时不同的,服务器进程一般是先启动的,只要系统运行,该服务器进程一直存在,除非正常或者被迫中止

基于net 模块实现通信

Node.js的net模块提供了一些底层通信的小工具,其中包括创建C/S模式的方法

服务器端代码

var net=require('net')

var server=new net.createServer();

//用来存放多个socket用户对象的集合

var obj=new Object()

//流水账号--保证用户不重复

var i=0;

server.on('connection',(client)=>{

client.name=++i;

obj[client.name]=client

// client==像服务器发送数据的socket对象

client.on('data',(data)=>{

console.log('客户端发来:--'+data)

huifu(data,client)

})

})

function huifu(message,client){

// client.write('服务器已经收到')

for (let i in obj) {

obj[i].write(client.name+'说:'+message)

}

}

server.listen(3000)

客户端代码

var net=require('net')

var readline=require('readline')

//创建socket对象

var client=new net.Socket();

var port=3000;

var hostname='localhost';

client.connect(port,hostname,()=>{

client.write('hello 客户端已经上线')

})

client.on('data',(data)=>{

console.log('收到服务器回复:--'+data)

say()

})

var r1=new readline.createInterface({

input:process.stdin,

output:process.stdout

})

function say(){

r1.question('请输入要发送的内容:',(str)=>{

client.write(str)

})

}

Websoket

是h5提供的一种双工通信的协议,而且目前所有流行的浏览器都支持这个协议

new WebSocket("ws://echo.websocket.org");申请一个WebSocket对象,参数是需要连接的服务器端的地址,WebSocket对象一共支持四个消息 onopen, onmessage, onclose和onerror。当Browser和WebSocketServer连接成功后,会触发onopen消息;如果连接失败,发送、接收数据失败或者处理数据出现错误,browser会触发onerror消息;当Browser接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据;当Browser接收到WebSocketServer端发送的关闭连接请求时,就会触发onclose消息。我们可以看出所有的操作都是采用消息的方式触发的,这样就不会阻塞UI,使得UI有更快的响应时间,得到更好的用户体验

转载于:https://blog.51cto.com/14071672/2326620

web前端技术基础课程讲解之浅谈对soket的理解相关推荐

  1. web前端技术杂谈--css篇(1)--浅谈margin(续)

    2019独角兽企业重金招聘Python工程师标准>>> 1.margin负值实现左右两列布局(左边固定宽度,右边自适应)代码如下: css代码: .main{             ...

  2. 现代前端技术解析:Web前端技术基础

    ​ 最近几年,越来越多的人投入到前端大军中:时至至今,前端工程师的数量仍然不能满足企业的发展需求:与此同时,互联网应用场景的复杂化提高了对前端工程师能力的要求,一部分初期前端工程师并不能胜任企业的工作 ...

  3. Web前端技术基础实验报告三之超链接与多媒体文件应用

    目录 Web前端技术基础实验报告 实验题目:超链接与多媒体文件应用 实验目的:熟悉超链接与多媒体文件的插入的相关标签 实验内容 : 实验过程及结果 Web前端技术基础实验报告 实验题目:超链接与多媒体 ...

  4. Web前端技术基础实验报告二之格式化文本、段落与列表

    目录 实验题目:格式化文本.段落与列表 实验目的:熟悉格式化文本与段落.列表的相关标签 实验内容: 项目1  文本与段落标记的应用 项目2  设计新闻访问列表 项目3 设计制度宣传展板 项目4 制作饭 ...

  5. 软件测试第一阶段:web前端技术基础-13- linux系统中的基础命令和文件管理命令

    一.常用的系统 windows 个人系统:windows xp.7.8.10.11 服务器系统:windows server 2003.windows server 2008.windows serv ...

  6. Web前端技术课程设计——技术栈【SpringBoot+Vue+MySQL+MyBatis】的在线英语考试系统

    一.技术简介 本网站使用了前后端分离的开发技术,是基于SpringBoot + VUE的在线英语考试系统,支持选择题.填空题.判断题.多选题.系统包含三种角色(管理员.老师.考生),实现的功能包含在线 ...

  7. Web前端技术 Web学习资料 Web学习路线 Web入门宝典(不断更新中)

    (此文档于2019年3月停止再更新,后续更新移步至:https://github.com/liuyuqin1991/polaris) 学习路线 第一章 技术(核心单独列章节) 1.Node Node. ...

  8. Web前端技术人才抢手 慕课网揭秘前端学习技巧

    互联网的高速发展促使IT人才越来越抢手,web前端工程师这一职业备受青睐.那么如何成为一名优秀的Web前端工程师?IT在线教育为从业人员提供了便捷.有效的学习途径.中国最大的IT实战学习平台--慕课网 ...

  9. 网页编程从入门到精通 杨凡_干货 | web前端入门基础知识

    一名合格的web前端工程师必须得掌握HTML.CSS和JavaScript. 只懂其中一个或两个还不行,你必须对这三门语言都很熟悉. 也不是说必须对这三门语言都非常精通,但你至少要能够运用它们完成大多 ...

最新文章

  1. 优先级队列(小顶堆)的dijkstra算法
  2. Android 控件学习--自定义SeekBar
  3. OpenStack Neutron浅析(二)
  4. 027_JavaScript数组迭代
  5. JSR303—Bean Validation验证
  6. sqlldr 导入乱码,Oracle客户端字符集问题
  7. 程序员自身价值值这么多钱么?
  8. Fortinet:行走在网络和安全融合领域的最前列
  9. java 冻结对象_模式匹配时冻结 - java
  10. mysql表级锁和行级锁_Mysql的表级锁和行级锁
  11. 解决:用PivotGridControl 与 chartControl 配合使用,Series最大只显示10条
  12. windows 7 提示缺少D3DCOMPILER_47.dll的正确解决方法
  13. 《软件构架实践》(六) —— 构架编档
  14. 直方图 (histogram)
  15. 台达plc用c语言编程软件,台达plc编程
  16. 通信原理包络是什么意思_自己总结的通信原理部分知识点
  17. Word2Vec模型配置参数
  18. python-qbittorrent+爬虫第二弹:爬取国内某bt站内容、分析页面,批量导入qbittorrent并下载归档
  19. Ring of Elysium 游戏汉化
  20. yahoo.cn邮箱foxmail收发攻略

热门文章

  1. 2、使用Spring框架能带来哪些好处
  2. PHP FPM源代码反刍品味之三: 多进程模型
  3. oracle或mysql分组查询并且获取前3条排序后的数据
  4. RocketMQ在Windows环境下部署(亲测有效)
  5. python设计模式8-组合模式
  6. Go内存管理之代码的逃逸分析
  7. Spring Security:自定义登录页面
  8. springbatch导出mysql数据到外部文件
  9. [转]携程大数据实践:高并发应用架构及推荐系统案例
  10. SVN-您的主机中的软件中止了一个已建立的连接