我在端口 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/