【问题标题】:How to create a fake server for Node.js "net"?如何为 Node.js“网络”创建一个假服务器?
【发布时间】:2017-10-10 07:04:56
【问题描述】:

背景

我有一个用例,我的应用程序每 X 秒从一台机器接收数据。

此应用程序使用来自 Node.js 的 net 官方库通过 IP 地址和端口连接到该计算机。

const net = require("net");
const config = require("./config.json");

const client = new net.Socket();

client.connect(config.readerPort, config.readerIP, () => console.log("Connected"));

client.on("close", () => console.log("Connection closed"));

client.on("data", console.log);

目标

我的目标是创建一个假服务器,就像机器一样,允许我的应用程序通过 IP 和端口连接到它,并且每 X 秒发出事件。

为了模拟这一点,我创建了一个每 5 秒打印 0 的小应用:

setTimeout(() => {
    console.log(0);
}, 5000);

我的目标是将小应用程序绑定到 IP 和端口 (localhost),而不是打印到控制台,然后让我的应用程序从中读取。

问题

使用来自 Node.js(或任何其他)的 net 库,如何将我的假服务器从打印到控制台更改为将该信息发送到本地主机 IP 和端口?

【问题讨论】:

    标签: javascript node.js sockets server


    【解决方案1】:

    解决方案

    经过大量搜索,我实际上找到了一种方法来做到这一点,除了net之外没有任何外部库。

    我得出的结果是这个的变体:

    const net = require('net');
    
    const HOST = '127.0.0.1';
    const PORT = 6969;
    
    net.createServer( sock => {
    
        console.log(`CONNECTED: ${sock.remoteAddress}:${ sock.remotePort}`);
    
        sock.on('close',() => console.log("CLOSED"));
    
        setTimeout(() => {
            sock.write("Hello WOrld\r\n");
        }, 10000);        
    
    }).listen(PORT, HOST);
    
    console.log('Server listening on ' + HOST +':'+ PORT);
    

    然后我的客户端机器会很高兴地选择它。

    您可以在此处找到原始教程/源代码:

    提示

    注意线路终端很重要。根据node.js socket.write() not work on if condition,如果不添加\r\n这样的终止字符,一些客户端将不会接受它们。

    另一个重要的考虑因素可能是您需要强制将write 的输出放置立即。在node.js socket.write() not work on if condition 阅读更多内容。

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2014-05-06
      • 2011-06-15
      • 2012-07-10
      • 2014-09-22
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2019-04-21
      相关资源
      最近更新 更多