相关文章推荐
重感情的斑马  ·  SQL ...·  1 年前    · 
果断的汤圆  ·  Excel ...·  1 年前    · 

1.什么是套接字

网络套接字是跨整个计算机网络流动的通信的端点。套接字位于HTTP层下面并提供服务器之间的点对点通信。几乎所有的互联网通信都是基于在互联网上两点之间传输数据的Internet套接字。

套接字使用套接字地址开展工作,这是IP地址和端口的组合。在套接字连接中有两种类型的点:一类是服务器,它监听连接;另一类是客户端,它打开一个到服务器的连接。服务器和客户端都需要一个唯一的IP地址和端口的组合。

Node.js net模块套接字使用传输控制协议(TCP)通过发送原始数据来通信。这个协议负责包装数据并保证它从一点成功发送到另一点。Node.js套接字实现了Duplex(双工流),它允许你读取和写入服务器与客户端之间的数据流。

套接字是http模块的底层结构。如果你不需要处理如GET和POST的Web请求的功能,你只需要点对点的传输数据,那么使用套接字就能为你提供一个轻量级的解决方案和更多的控制。

在与同一台计算机上运行的其他进程进行通信时,套接字也很方便。进程不能直接共享内存,所以如果你想从另一个进程访问在一个进程中的数据,则可以在每个进程中打开同一个套接字来读取和写入两个进程之间的数据。
--------------------------------------------------------------------------------------来源
在Node.js中实现套接字服务

2.套接字中5种必须信息

套接字中包含了进行网络通信的5中必须信息:连接使用的协议、客户端设备的IP、客户端的端口号、服务器端的IP、服务器端的端口号

在搭建TCP服务之前为什么需要说一下套接字(Socket)呐?这是因为TCP和套接字之间有着密不可分的关系

3.TCP和套接字的联系

学过网络工程或者有过相关的了解的会知道,每条TCP连接有两个端点。那么,TCP连接的端点是什么呐?不是主机、不是主机IP、也不是应用进程,而是套接字或插口。根据RFC 793的定义:端口号拼接到IP地址即构成了套接字。

套接字 socket=(IP地址:端口号)

每一条TCP连接唯一地被通信两端的两个端点(两个套接字)所确定

4.搭建TCP服务

var net=require('net');//引入net模块
    var server=net.createServer();//创建一个TCP或本地服务器
    var count=0;//统计客户端连接服务器的数量
    server.on('connection',function (socket) {//服务器会把客户端的IP和端口号封装到Socket对象中,并传递到connection事件处理函数的第一个参数中                     connection 当新连接创建后会被触发,socket是net.Socket的实例
        count++;
        socket.setEncoding("utf8");
        console.log('你已连接服务器,当前连接数为:'+count);
        console.log('客户端IP地址:'+socket.remoteAddress+"连接到当前服务器");
        socket.on('data',function (data) {//监听客户端发来的信息
            socket.write("你好,"+socket.remoteAddress+"客户端,我是服务器\n");//套接字实现了全双工,所以提供了write来进行可写操作。
            console.log(data.toString());
        socket.on('end',function () {//连接断开
            console.log("有一个客户端断开连接,当前在线客户端连接数为:"+(--count));
    server.on('listening',function () {//当服务器调用server.listen绑定后会触发
        console.log("监听....");
    server.on('error',function (err) {//发生错误是触发
        throw err;
    server.on('close',function () {//服务器关闭时触发,如果存在连接,这个事件不会被触发,直到所有的连接关闭
        console.log("服务器关闭");
    server.listen(8080,'127.0.0.1');

5.多人广播实例

//多人广播聊天服务器
//引入模块
var net=require('net');
//创建服务对象
var server=net.createServer();
//封装所有客户端的Socket
var users=[];
server.on('connection',function (socket) {
    users.push(socket);//把socket对象放入数组中
    socket.on('data',function (data) {
        data=data.toString().trim();
        //console.log(users);
     console.log(users.length);
        users.forEach(function (client) {
            //这里的client就是遍历数组是的item
            if(client!==socket)
            {//client!==socket的思想就是当user中的socket不等于当前连接的socket时,就发送信息。
                client.write(client.remotePort+":"+data);
server.on('error',function () {
   console.log("客户端异常退出!");
server.listen(8080,"127.0.0.1");
var net=require("net");
var client=net.createConnection({//创建客户端
    port:8080,
    host:"127.0.0.1"
client.on('connect',function () {
   process.stdin.on("data",function (data) {//process模块是全局对象,它表示获取终端输入的数据
      data=data.toString().trim();
      client.write(data);//发送到服务器
client.on('data',function (data) {
    console.log(data.toString());
client.on('error',function(error){
//错误出现之后关闭连接
    console.log('error:'+error);
    client.destroy();
client.on('close',function(){
//正常关闭连接
    console.log('Connection closed');

效果图:
在这里插入图片描述
上图显示有两个客户端连接,现在两个客户端相互发送消息
在这里插入图片描述
在这里插入图片描述
三个客户端发信息
在这里插入图片描述
可见多人广播已经实现。

内容如果有什么需要改进,欢迎指出

使用 Node 创建 Web 服务器 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。 大多数 web 服务器都支持服务端的脚本语言(php、python、ruby)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器。 目前最主流的三个Web服务器是Apache、Nginx、IIS。 Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必
const EventEmitter = require('events').EventEmitter; const channel = new EventEmitter(); // channel实例 channel.clients = {}; // 连入的用户 channel.b 1.1创建TCP服务器 在Node.js利用net模块创建TCP服务器 var server = net.createServer([options],[connectionListener]) //options:false当TCP服务器接收... ```javascript const server = http.createServer((req, res) => { res.writeHead(200, {'Content-Type': 'text/html'}); res.end('<h1>Hello World!</h1>'); 启动服务器: ```javascript server.listen(3000, () => { console.log('Server started on port 3000'); 3. 创建 Socket.io 实例 创建一个 Socket.io 实例并将其连接到 HTTP 服务器上: ```javascript const io = socketIO(server); 4. 处理连接和断开事件 当有客户端连接到服务器时,Socket.io 会触发 `connection` 事件: ```javascript io.on('connection', (socket) => { console.log('A user connected'); 当客户端断开连接时,Socket.io 会触发 `disconnect` 事件: ```javascript socket.on('disconnect', () => { console.log('A user disconnected'); 5. 实现聊天功能 当客户端发送消息时,服务器会将消息广播给所有连接的客户端: ```javascript socket.on('chat message', (msg) => { io.emit('chat message', msg); 当客户端连接时,服务器会将欢迎消息广播给所有连接的客户端: ```javascript io.emit('chat message', 'A user has joined the chat'); 当客户端断开连接时,服务器会将离开消息广播给所有连接的客户端: ```javascript io.emit('chat message', 'A user has left the chat'); 6. 客户端实现 在客户端 HTML 文件中,引入 Socket.io: ```html <script src="/socket.io/socket.io.js"></script> 连接到服务器: ```javascript const socket = io(); 发送消息: ```javascript $('form').submit(() => { socket.emit('chat message', $('#m').val()); $('#m').val(''); return false; 接收消息: ```javascript socket.on('chat message', (msg) => { $('#messages').append($('<li>').text(msg)); 这样,一个基于 Node.js 和 Socket.io 的多人聊天室就完成了。 vue2.x+ts项目,在props type导入自定义接口类型报‘xxx‘ only refers to a type, but is being used as a value here处理办法 12374