浅谈对soket的理解

更新日期: 2018-12-06阅读: 2.8k标签: 网络

定义:

网络上的两个程序通过一个双向的通信链实现数据的交换,这个链接的一端就成为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有更快的响应时间,得到更好的用户体验


来源:http://blog.51cto.com/14071672/2326620


链接: https://fly63.com/article/detial/1507

kubernetes之Flannel网络插件部署

Kubernetes系统上Pod网络的实现依赖于第三方插件,而Flannel是由CoreOS主推的目前比较主流的容器网络解决方案,CNI插件有两种功能:网络配置和网络策略,由于flannel比较简单,并不支持网络策略

JS 测试网络速度与网络延迟

通过js加载一张1x1的极小图片,测试出图片加载的所用的时长。如果换一个几百KB的图片,则可心用来计算下载网速 ,第一次加载图像时,它将比后续加载花费更长的时间,即使我们确保图像没有被缓存。

2019最新网络赚钱方法有哪些?推荐几种靠谱赚钱方式!

2019年已经是互联网发展的成熟期了,随着网络的不断发展,以及手机应用的普及,几乎人人都已经会使用网络工具。但是又有多少人知道网络赚钱这个小众的赚钱方式呢?

Angular网络请求

在Angular网络请求是一个最常见的应用之一,下列我将以 ng-alain 项目为基础描述 Angular 网络请求。注:示例中代码都以简化的形式出现。

全面分析前端的网络请求方式

大多数情况下,在前端发起一个网络请求我们只需关注下面几点:传入基本参数(url,请求方式),请求参数、请求参数类型,设置请求获取响应的方式

由Web Beacon-网络臭虫引发的思考

为何在百度搜索之后,一些网站总能够推荐我刚刚搜索过的东西?百度会记录你的搜索信息,同时会在你本地保存一个标识本地的cookie,而当你打开第三方网站时,第三方网站嵌入了百度广告的JS代码

Deepfake_深度神经网络换脸

Deepfake从技术的角度而言,这是深度图像生成模型的一次非常成功的应用,这两年虽然涌现出了很多图像生成模型方面的论文,但大都是能算是Demo,没有多少的实用价值,除非在特定领域(比如医学上)

从狭义SDN到广义SDN,网络自动化趋势下的SDN

SDN的概念主要体现的是技术架构视角,强调的是实现网络设备的软件硬件解耦、网络系统的控制面与转发面解耦,以及整体全面的可编程性。SDN的优势在于它是基于系统全局信息进行网络转发等的策略决策的

计算机网络常见问题

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值

前端网络监控与断网重链

最近在做大屏数据可视化项目得时候,在思考项目交付和运行情况得时候,考虑到了需要在公司大屏显示器上面展示,突然想到了项目可能面临断网及其网速慢得情况下得一下展示问题,因此作为专栏进行这两个问题得讲解

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!