use*_*204 0 cross-domain-policy node.js socket.io
我有一个问题,从页面插件IO连接,由nodeJs服务器生成,到另一个由Socket.IO监听的nodeJs服务器
这个想法包含2个任务:由一个Express服务器生成HTML模板由另一个Express服务器支持套接字io
这是server.js代码:
const app = require('express');
const util = require('util');
const http = require('http');
const fs = require('fs');
const debug = console.log;
const moment = require('moment');
const event = require('events').EventEmitter;
var server = app();
server.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
}
);
server.use(app.json());
server.use(app.urlencoded());
server.use(app.logger());
server.use(app.favicon());
server.use(app.static(__dirname + '/core'));
server.get('*', function (req, res, next) {
debug('Connection refused: \t' + req.url);
var r = (e.url.split('/')[2] == 'socket.io.js') ? server.st.socket : server.st.tmp; // Return TMP-HTML FILE OR SOCKET.IO JS FILE FOR CLIENT
res.send(r);
res.end();
});
server.st = {
socket: fs.readFileSync('./socket.io.js', 'utf-8')
tmp: fs.readFileSync('./tmp.html', 'utf-8')
}
server.listen(81);
*******************************************************************************
//Creating SOCKET server
io = require('socket.io').listen(82);
io.configure(function () {
io.set('log level', 1);
io.set('origin', '*');
});
io.sockets.on('connection', function (socket) {
debug('IT IS WORK')
})
Run Code Online (Sandbox Code Playgroud)
这是tmp.html代码:
<!DOCTYPE html>
<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:82');
</script>
</head>
<body>
</body>
Run Code Online (Sandbox Code Playgroud)
并且默认为客户端的Socket.io.js
这是客户端的错误
XMLHttpRequest cannot load http://localhost:82/socket.io/?EIO=2&transport=polling. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:81' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
答案是:
必须支持Socket HTTP服务器,有778线(V0.9),则必须在原产地选择这样的事情写在股票套接字选项默认原点设置,不能由VAR IO configurate改变,manager.js:标题[ 'Access-Control-Allow-Origin'] ='*'; 要么
解决方案的最佳方式是:
必须支持Socket HTTP服务器,已绑定的地址与它自己的监听器,创建一个套接字beetwen客户端请求这条隧道,使用socket.io.js文件,我从本地主机获得:81 ..这就是为什么我问我自己: "为什么我从服务器获取套接字客户端文件,这与套接字服务器无关?" 并改变了
<script src="http://localhost:82/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:82');
</script>
Run Code Online (Sandbox Code Playgroud)
它有效.THX,来自俄罗斯的热爱.再见.
| 归档时间: |
|
| 查看次数: |
5261 次 |
| 最近记录: |