Socket.io的Node.js在本地运行,但不能远程运行请求IP更改为远程

问题描述

我觉得我已经用尽了所有相关的帖子和​​解决方案,没有解决方案,也没有解决我所看到的确切问题(尽管很多非常相似)。

简而言之,我有一个非常简单的NodeJS socket.io发射器和客户端示例。 当客户端网页与nodeJS socket.io发射器应用程序托管在同一主机上时,它将按预期运行。从任何其他主机执行的同一客户端网页也会出现相同的问题。

基本上,我会收到如下连续消息;

myfile

我将在下面解释详细信息,但是我相信吸烟者是该请求的IP地址/主机已更改为承载客户端网页的主机。

在同一主机(192.168.0.35)上运行时,我获得以下成功;

404 [XHR]       http://192.168.0.41/socket.io/?EIO=3&transport=polling&t=NGc5_Pg    

远程运行时,该IP地址现在是网页服务器的主机! (我确定有一些简单的原因导致我不明白) 为什么请求IP现在是.41而不是.35?

这是两个测试的更完整比较;

工作:客户端页面与节点发射器充当同一主机

200 [XHR]       http://192.168.0.35:3000/socket.io/?EIO=3&transport=polling&t=NGc1BqD
101 [WebSocket] ws://192.168.0.35:3000/socket.io/?EIO=3&transport=websocket&sid=jIxHFTv6eoIXXGiRAAAH    
200 [XHR]       http://192.168.0.35:3000/socket.io/?EIO=3&transport=polling&t=NGc1Bqi&sid=jIxHFTv6eoIXXGiRAAAH

失败:客户端页面为其他任何主机提供服务

200 [XHR]       http://192.168.0.35:3000/socket.io/socket.io.js                                                     Content-Type: application/javascript
200 [XHR]       http://192.168.0.35:3000/socket.io/?EIO=3&transport=polling&t=NGc1BqD                               Content-Type: text/plain; charset=UTF-8
101 [WebSocket] ws://192.168.0.35:3000/socket.io/?EIO=3&transport=websocket&sid=jIxHFTv6eoIXXGiRAAAH                Content-Type: text/plain; charset=UTF-8
200 [XHR]       http://192.168.0.35:3000/socket.io/?EIO=3&transport=polling&t=NGc1Bqi&sid=jIxHFTv6eoIXXGiRAAAH      Content-Type: text/plain; charset=UTF-8

请注意,端口3000已打开,并且已成功为socket.io.js提供服务。 同样,托管客户端网页(nginx,节点等)的托管似乎也没有关系

当远程运行时,我没有看到任何CORS或XSS错误-我认为这是有道理的-因为请求已更改为本地IP /域?

如果能帮助我了解无法理解的地方或缺少的东西,我将不胜感激!

这是代码;

节点testsockets.js

200 [script]    http://192.168.0.35:3000/socket.io/socket.io.js                                                     Content-Type: application/javascript
404 [XHR]       http://192.168.0.41/socket.io/?EIO=3&transport=polling&t=NGc5_Pg                                
404 [XHR]       http://192.168.0.41/socket.io/?EIO=3&transport=polling&t=NGc61sS
404 [XHR]       http://192.168.0.41/socket.io/?EIO=3&transport=polling&t=NGc5_l5
...
...
... infinity        

客户端HTML页面

app.use(function(req,res,next) {
    res.setHeader("Access-Control-Allow-Origin","*");
    res.setHeader("Access-Control-Allow-Headers","X-Requested-With");
    res.setHeader("Access-Control-Allow-Headers","Content-Type");
    res.setHeader("Access-Control-Allow-Methods","PUT,GET,POST,PATCH,DELETE,OPTIONS");  
    res.setHeader('Access-Control-Allow-Credentials',false);  
    res.setHeader("Content-Security-Policy","script-src 'self'");
    next();
  });

var options = {
  allowUpgrades: true,transports: ['websocket','file','htmlfile','xhr-polling','jsonp-polling','polling'],pingTimeout: 9000,pingInterval: 3000,httpCompression: true,origins: '*:*' 
};

var http = require('http').createServer(app);
var io = require('socket.io')(http,options);

app.use(bodyParser.json());
app.use(express.static('public'));

sub_client.subscribe('datahub.tsv.environment');

sub_client.on("message",function(channel,message){
   io.emit('event message',message);
   console.log("redis subscription message: " + JSON.stringify(message));
});

http.listen(3000,'192.168.0.35',() => {
  console.log('dataHUB NodeJS Redis Subscriber listening on *:3000');
});

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)