如何将socket.io和Express.js与IISNode一起使用

时间:2018-02-15 15:16:44

标签: node.js express socket.io iis-8

我已经设置了带有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的文档吗?

我希望有人可以帮助我。

亲切的问候

1 个答案:

答案 0 :(得分:0)

看起来您的重写规则是错误的。您是否忘记在url属性后面添加“。+”?

 <rule name="SocketIO" patternSyntax="ECMAScript">
     <match url="socket.io.+"/>
     <action type="Rewrite" url="server.js"/>
 </rule>
相关问题