ws+socket.io 精读Websocket原理大全需知,以及具体使用( 四 )

4.2 创建TCP服务器使用Node.js创建TCP服务器,首先要使用require(‘net’)来加载net模块,之后使用net模块的createServer方法就可以创建一个TCP服务器.

  • 使用net模块创建TCP服务器
  • 使用telnet连接TCP服务器
  • 使用net创建TCP客户端
下面代码构建一个TCP服务器:
//引入net模块var net=require('net');//创建TCP服务器var server=net.createServer(function(socket){console.log('someone connets');})server.listen(18001,function(){console.log('server is listening');});复制代码当在浏览器中输入http://localhost:18001/,连接成功后就会打印出someone connets字样,表明createServer方法的回调函数已经执行,说明已经成功连接这个TCP服务器 。
服务端:tcp.js:
const HOST = '127.0.0.1';//引入net模块var net=require('net');//创建TCP服务器var server=net.createServer(function(socket){console.log('someone connets');////获取地址信息var address=server.address();//获取地址端口console.log('the portis '+address.port);console.log('the addressis '+address.address);var message='client,the server address is'+JSON.stringify(address);//发送数据socket.write(message,function(){var writeSize=socket.bytesWritten;console.log(message+'has send');console.log('the size of message is'+writeSize);});//监听dada事件socket.on('data',function(data){//打印dataconsole.log(data.toString());socket.write('server write:test ')});}); //设置监听端口server.listen(18001,HOST,function(){console.log('server is listening');});复制代码启动服务 node tcp.js
客户端 cmd
1> 在cmd 控制台输入模拟客户端: telnet 127.0.0.1 18001
但是需要先通过控制面板把 telnet 勾选上,如下图所示:
ws+socket.io 精读Websocket原理大全需知,以及具体使用

文章插图
 
2> 或者通过网络调试助手模拟客户端和服务端 调试
ws+socket.io 精读Websocket原理大全需知,以及具体使用

文章插图
 
网络调试助手调试下载地址:
链接:https://pan.baidu.com/s/1bZQm1f9UtBKPSAIyqM4Nyw 提取码:d9ck复制代码参考:www.onlinedown.net/soft/971066…
客户端 tcpClient.js:
var net = require('net')const PORT = 18001;const HOST = '127.0.0.1';var tcpClient = net.Socket();tcpClient.connect(PORT, HOST, function(){console.log('客户端发送信息成功打印')tcpClient.write('客户端发送信息成功')});tcpClient.on('data',(data)=>{console.log( data.toString())})复制代码五、websocket 常用框架
  • socket.io
  • Ws
5.1 WebSocket事件:WebSocket API是纯事件驱动,通过监听事件可以处理到来的数据和改变的链接状态 。客户端不需要为了更新数据而轮训服务器 。服务端发送数据后,消息和事件会异步到达 。WebSocket编程遵循一个异步编程模型,只需要对WebSocket对象增加回调函数就可以监听事件 。你也可以使用addEventListener()方法来监听 。而一个WebSocket对象分四类不同事件 。
5.1.1 open:一旦服务端响应WebSocket连接请求,就会触发open事件 。响应的回调函数称为onopen 。
ws.onopen = function(e) {console.log("Connection open...");};复制代码open事件触发的时候,意味着协议握手结束,WebSocket已经准备好收发数据 。如果你的应用收到open事件,就可以确定服务端已经处理了建立连接的请求,且同意和你的应用通信 。
5.1.2 Message当消息被接受会触发消息事件,响应的回调函数叫做onmessage 。如下: // 接受文本消息的事件处理实例:
ws.onmessage = function(e) {if(typeof e.data =https://www.isolves.com/it/cxkf/bk/2020-10-14/== "string"){console.log("String message received", e, e.data);} else {console.log("Other message received", e, e.data);}};复制代码除了文本消息,WebSocket消息机制还能处理二进制数据,有Blob和ArrayBuffer两种类型,在读取到数据之前需要决定好数据的类型 。
// 设置二进制数据类型为blob(默认类型)ws.binaryType = "blob";// Event handler for receiving Blob messagesws.onmessage = function(e) {if(e.data instanceof Blob){console.log("Blob message received", e.data);var blob = new Blob(e.data);}};//ArrayBufferws.binaryType = "arraybuffer";ws.onmessage = function(e) {if(e.data instanceof ArrayBuffer){console.log("ArrayBuffer Message Received", + e.data);// e.data即ArrayBuffer类型var a = new Uint8Array(e.data);}};复制代码5.1.3 Error如果发生意外的失败会触发error事件,相应的函数称为onerror,错误会导致连接关闭 。如果你收到一个错误事件,那么你很快会收到一个关闭事件,在关闭事件中也许会告诉你错误的原因 。而对错误事件的处理比较适合做重连的逻辑 。


推荐阅读