Eri*_*ric 5 sockets iis node.js 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();
});
}
Run Code Online (Sandbox Code Playgroud)
我读到你可以通过添加密码来解决这个问题
ciphers: 'DES-CBC3-SHA'
Run Code Online (Sandbox Code Playgroud)
但我不知道它与我的代码有多相关,甚至不知道把它放在哪里!
这是错误的详细信息
{ 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' }
Run Code Online (Sandbox Code Playgroud)
编辑:更新到最新版本(2.0.3)并且仍然有问题。
编辑 2:使用io.emit时似乎发生了ECONNERESET,这很奇怪,因为感觉它试图在没有验证套接字是否仍先连接的情况下发出...
我认为托管 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"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |