小编y_n*_*_nk的帖子

Nodejs tcp套接字发送多个数据事件

我试图通过使用 tcp 包进行编码来演示 http 服务器如何工作的最简单方法。我之前曾多次这样做过,但今天我遇到了意外的行为,因为针对类似的请求,data来自套接字对象的事件被随机触发一次或多次,我想知道为什么,以及如何正确修复它。

请注意,我知道我应该使用流方式处理数据,这是我在第二次演示中所做的。重点是每次都增加复杂性以使演示更容易理解。

这是服务器。正如您所看到的,它非常简单且易于获取。

const net = require('net')

const response = `HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Foo: Bar

foobar
`

net.createServer(socket => {
  socket.on('data', buffer => {
    console.log('----- socket data', Date.now())
    console.log(buffer.toString())
    socket.write(response)
    socket.end()
    console.log('-----')
  })

  socket.on('end', () => console.log('----- socket end.'))
  socket.on('close', () => console.log('----- socket close.', '\n'))
}).listen(2000)
Run Code Online (Sandbox Code Playgroud)

为了测试我的服务器,我只需打开任何网络浏览器http://localhost:2000并获取响应;但是当使用以下有效负载(使用浏览器的javascript控制台)时,有时数据事件会被触发两次,最终导致错误,因为该write/end过程无法再次进行。

var xhr = new XMLHttpRequest();
xhr.open("POST", "/");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ foo: "bar" }));
Run Code Online (Sandbox Code Playgroud)

这是服务器日志的快照,如果有帮助的话:

----- socket data …
Run Code Online (Sandbox Code Playgroud)

sockets tcp node.js

6
推荐指数
1
解决办法
2460
查看次数

在 npm 上创建一个可用的库...使用纱线工作区

我正在寻找对我在修补时编码的模式的反馈

语境

我正在为我的公司创建一个包,该包将公开发布。DX(开发者体验)对我们来说是最重要的,为此我选择了开发的最新趋势:Typescript、esm 等......我想提出多个模块并使导入易于使用,类似到(例如)nextjs 的next/Router.

[编辑]我发现了这个线程并交叉引用以供曝光。

第一步

我从一个简单的单个包开始我的第一次尝试,tsconfig 和 src/、tests/ 和 dist/ 文件夹。那里没有什么令人难以置信的异国情调,但如果你一直这样做,你就会知道发布它会导致你的导入路径dist稍后包含。

可以使用 package.json 的main字段解决此问题,但这仅适用于顶级模块;您可以使用exports,但它不适用于 Typescript。最简单的解决方法是cp package.json dist/ && npm publish dist/,到此,问题就解决了。

然后我想为了测试这个,我将成为npm link我的 dist/ 文件夹,虚拟地创建“一个包中的包”,几乎没有问题:

  • 这部cp package.json dist/分会增长*.md,谁知道还有什么/它会如何增长(我不想有构建脚本文件)
  • 我仍然需要构建一个测试应用程序来在 DX 级别测试我的库,以及在哪里托管它?

所以我想:为什么不把它全部提升为一个 monorepo 呢?

转折点

树结构将从:

myLib/
  package.json ? build + test + publish script
  tsconfig.json
  jest.config.json
  .npmignore ? managing what to …
Run Code Online (Sandbox Code Playgroud)

npm typescript monorepo yarnpkg yarn-workspaces

5
推荐指数
0
解决办法
606
查看次数

标签 统计

monorepo ×1

node.js ×1

npm ×1

sockets ×1

tcp ×1

typescript ×1

yarn-workspaces ×1

yarnpkg ×1