无法获取IISNode,socket.io和express一起工作

时间:2014-12-20 20:34:17

标签: node.js socket.io iisnode

请阅读我的问题,即使是一小段建议也会感激不尽。

我在Google Chrome中遇到以下错误:

 GET http://localhost/socket.io/?EIO=3&transport=polling&t=1419089743449-2 404 (Not Found)

我的文件夹设置如下:

  

本地主机

     
    

         
      

公共

             
        

socket.io/socket.io.js

                 

cssfile.css

                 

jsfile.js

      
             

app.js

             

node_ modules

    
  

在我看来,客户端对握手的请求是错误的,因为错误应该是localhost / pro / public / socket.io / blah blah。

我使用以下设置:

web.config:

<handlers>
 <add name="iisnode" path="app.js" verb="*" modules="iisnode" />
</handlers>
<rewrite>
 <rules>
  <rule name="DynamicContent">
   <match url="/pro/" negate='True'/>
   <!--<conditions>
    <add input="pro" matchType="IsFile" negate="True"/>
   </conditions>-->
   <action type="Rewrite" url="app.js"/>
 </rule> 
 <rule name="LogFile" patternSyntax="ECMAScript">
  <match url="socket.io"/>
  <action type="Rewrite" url="app.js"/>
 </rule>               
</rules>
</rewrite>

客户端js:

 var socket = io.connect('http: //localhost', {resource: 'pro/public/socket.io' }); 

服务器端js(节点):

 var http = require('http');

 var express = require('express');
 var app = express();
 var port = process.env.PORT || 3002;

 var server = http.createServer(app).listen(port);

 io = require('socket.io').listen(server, { resource : '/pro/public/socket.io' });

我按照预期得到了html,并且也提供了静态文件;我无法让socket.io工作。

2 个答案:

答案 0 :(得分:2)

解决方案:

改变:

  

io = require('socket.io')。listen(server,{resource:'/ pro / public / socket.io'});

  

io = require('socket.io')。listen(server,{path:'/ pro / public / socket.io'});

这对我有用,我希望它也适合你! :)

答案 1 :(得分:0)

Drizo,我认为你在socket.io上的404是各种各样的东西,但我不是一个巨大的专家! :)

首先,你的连接字符串中缺少端口,你需要这个。

其次,我不是100%确定你的socket.io初始化是正确的,虽然我使用名称空间并且之前没有听说过资源,我看起来像:

var app = require('express')();
var http = require('http').Server(app);
var config = require('./config')();

var server = http.listen(config.server.port, function () {
  console.log('listening on *:' + config.server.port);
});

var socketIo = require('socket.io');
var io = socketIo(http);
var namespaceIo = io.of('/namespace');
namespaceIo.on('connection', function (socket) {
   //configuration for events follows
   socket.on('someEvent', function (input) {
       ...
   }
}

使用这些行可以命名为socket.io实现,客户端可以连接类似

的内容
function initSocket(__bool){     

    if(__bool == true){
        io(serverAddress + '/namespace');
        if ( !socket ) {   
            socket = io.connect(serverAddress + '/namespace');
        } else {
            socket.socket.connect(serverAddress + '/namespace'); // Yep, socket.socket ( 2 times )
        }

        // now that we have the socket we can bind events to it
        bindSocketEvents();
    }else{
        socket.disconnect();
    }
}