我已经设置了带有IIS,IISNode和Rewrite模块的Windows 2012 r2服务器。 这一切似乎都很好,Express的简单应用程序似乎运行良好。 但是当我将socket.io添加到应用程序时,我会陷入困境。我得到以下错误:
*
获取http://mywebsiteadress/socket.io/socket.io.js net :: ERR_ABORTED
*
我使用IIS版本8.5.96,表达版本4.16.2和socket.io版本2.0.4。
服务器
let app = require('express')(),
server = require('http').Server(app),
io = require('socket.io')(server);
server.listen(process.env.PORT);
app.get('/',(req,res)=>{
res.sendFile(__dirname + '/index.html');
})
io.on('connection',socket=>{
socket.emit('test','working');
});
修改
我改变了
io = require('socket.io')(server);
为:
io = require('socket.io')(server,{
path: '/SocketIO/socket.io'
});
现在我收到了这个错误:
polling-xhr.js:264 GET http://mywebsiteadress/socket.io/?EIO=3&transport=polling&t=M6RHmTd 404 (Not Found)
i.create @ polling-xhr.js:264
i @ polling-xhr.js:165
o.request @ polling-xhr.js:92
o.doPoll @ polling-xhr.js:122
r.poll @ polling.js:118
r.doOpen @ polling.js:63
r.open @ transport.js:80
r.open @ socket.js:245
r @ socket.js:119
r @ socket.js:28
r.open.r.connect @ manager.js:226
r @ manager.js:69
r @ manager.js:37
r @ index.js:60
(anonymous) @ (index):12
客户端:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Socket IO Test Page</title>
</head>
<body>
<script src='socket.io/socket.io.js'></script>
<script>
let socket = io.connect()
socket.on('test',data => {
console.log(data);
})
</script>
</body>
</html>
的Web.config:
<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="index.js" verb="*" modules="iisnode" />
</handlers>
<rewrite>
<rules>
<rule name="LogFile" patternSyntax="ECMAScript">
<match url="socket.io"/>
<action type="Rewrite" url="index.js"/>
</rule>
</rules>
</rewrite>
<webSocket enabled="false"/>
</system.webServer>
</configuration>
我做错了什么?我搜索了互联网和这个论坛,并尝试了很多东西,但似乎没有人为我解决。 我似乎无法找到有关使用IISNode设置Socket.io的文档吗?
我希望有人可以帮助我。
亲切的问候
答案 0 :(得分:0)
看起来您的重写规则是错误的。您是否忘记在url属性后面添加“。+”?
<rule name="SocketIO" patternSyntax="ECMAScript">
<match url="socket.io.+"/>
<action type="Rewrite" url="server.js"/>
</rule>