Node.JS + socket.io + IIS = ECONNRESET

标签 node.js sockets iis socket.io

我在端口 8081 上运行 SSL 套接字。虽然这与 Apache2.4 完美配合,但在 IIS 上一段时间后,socket.io 会因 ECONNRESET 而崩溃,这在 Apache 中从未发生过。我的 socket.io 版本是 1.3.7。 IIS 是 v10 (windows server 2016)。

我已经按照建议添加了一些错误处理,但它并没有解决问题。这是经过清理的代码。

var options = {
  key: fs.readFileSync('example.key'),
  cert: fs.readFileSync('example.cert'),
  ca: fs.readFileSync('example.inter')
};

var app = require('https').createServer(options),
io = require('socket.io').listen(app);  
io.set('origins', '*:8081');
app.on('error', function(error){
    console.log('error', error);
});
app.listen(8081);

io.sockets.on('connection', function(__socket) {

     __socket.on('error', function(){
          __socket.destroy();
     });

     __socket.on('disconnect', function(){
          __socket.destroy();
     });
}

I read你可以通过添加像

这样的密码来解决这个问题
ciphers: 'DES-CBC3-SHA'

但我不知道它与我的代码有多相关,甚至不知道把它放在哪里!

这是错误的详细信息

{ Error: socket hang up
at createHangUpError (_http_client.js:253:15)
at Socket.socketCloseListener (_http_client.js:285:23)
at emitOne (events.js:101:20)
at Socket.emit (events.js:188:7)
at TCP._handle.close [as _onclose] (net.js:497:12) code: 'ECONNRESET' }

编辑:更新到最新版本 (2.0.3) 仍然有问题。

edit2: 似乎 ECONNERESET 在使用 io.emit 时发生,这很奇怪,因为它感觉它试图在没有首先验证套接字是否仍然连接的情况下尝试发射。 .

最佳答案

我认为托管 node.js 应用程序时 IIS WebSockets 实现存在问题,正如我从 Tomasz Janczuk 看到的一篇文章中提到的 - Hosting socket.io WebSocket Apps in IIS using iisnode .

有一个关于使用 web.config 文件配置 IIS 的部分,Janczuk 提到 IIS 中附带的 WebSocket 和 node.js WebSocket 实现存在冲突。

我还查看了 IIS 8 中引入的 WebSocket 设置,在 IIS 10 中没有进行任何修改。

我建议尝试使用 IIS 的 web.config 禁用 IIS WebSocket 设置,如 Janczuks 文章中所述。

<WebSocket enabled="false"/>

关于Node.JS + socket.io + IIS = ECONNRESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48216536/

相关文章:

jquery - 让 Node.js 中的 http.request 适用于浏览器

javascript - 失败后重新启动 Promise

node.js - Nodejs部署的应用程序中的环境变量

java - 如何使用UDP套接字传输jpg图像

iis - Web Api 请求在 IIS 上永远排队(状态为 : ExecuteRequestHandler)

iis - 如何在传输到存储之前过滤 Azure 中的 IIS 日志?

javascript - '类型错误 : Object is not a function' when using tunnel-ssh

Python套接字子进程连接一段时间后没有回复

Ruby - 多线程 TCP 消息

iis - 如何在 XP 和 C# 上使用 IIS5.1 调试客户端证书