浅谈对Socket的理解
定义:
网络上的两个程序通过一个双向的通信链实现数据的交换,这个链接的一端就成为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://itzsg.com/10483.html