socketio 报错(server :info - unhandled socket.io url 跟client端 XMLHttpRequest cannot load)
发布于 13 年前 作者 jtyjty99999 10932 次预览 最后一次回复是 13 年前 来自
server端
var http = require('http');
var io = require('socket.io');
//创建server
var server = http.createServer();
//端口8080
var io = io.listen(server);
server.listen(8089);
io.on("connection", function (client) {
setInterval(function () {
client.send(os.freemem() / os.totalmem());
}, 500);
});
client端
<!doctype html>
<html>
<head>
<title> 服务器内存使用情况 </title>
<script src="http://cdn.socket.io/stable/socket.io.js"></script>
<style>
#usage {border : 1px dashed green;}
</style>
<script>
var canvas, width = 200, height = 200, buffer = [], max = 200;
function updateChart(data) {
if (buffer.length >= max) {
buffer.unshift();
}
buffer.push(data);
var ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, width, height);
for (var i = 1, n = buffer.length; i < n; i++) {
ctx.strokeStyle = "red";
ctx.beginPath();
ctx.moveTo(i - 1 , buffer[i - 1] * height);
ctx.lineTo(i, buffer[i] * height);
ctx.closePath();
ctx.stroke();
}
}
function onLoad() {
canvas = document.getElementById("usage");
var socket = new io.Socket('192.168.1.3', {port: 8089});
socket.connect(); // 连接到服务器
socket.on("message", function(obj){ // 接收到消息时的处理方法
updateChart(obj);
});
}
</script>
</head>
<body onload="onLoad();">
<h1> 内存使用情况 </h1>
<canvas id="usage" width="200" height="200"></canvas>
</body>
</html>
然后 这两个东西,都放到了我的服务器上,我的服务器地址是192.188.1.3 是php的服务器。 我首先访问了 192.168.1.3:8080/client.html 进入页面端,之后在后台 node 开启了server端。 结果 页面端报错: XMLHttpRequest cannot load http://192.168.1.3:8089/socket.io/xhr-polling//1348727089478. Origin http://192.168.1.3:8080 is not allowed by Access-Control-Allow-Origin. server端报错 info - unhandled socket.io url warn - unknown transport: "undefined" info - unhandled socket.io url warn - unknown transport: "undefined
查了不少资料,发现要改origin 改了也没有用啊。。
9 回复
origin真的已经改了? https://github.com/jiyinyiyong/talkpage/blob/gh-pages/server.coffee#L7改的socketio配置文件manager.js
} headers[‘Access-Control-Allow-Origin’] = “*”
不好意思我看不懂coffee啊。。
@jtyjty99999 我是直接在
.listen后面加*:*参数然后成功的. 参考: http://stackoverflow.com/questions/6736706/socket-io-access-control-allow-origin-error-from-remote-site修改
headers的办法我不懂…@jiyinyiyong 加了两句 var io = io.listen(server); io.set(“origins”, “*”); io.set(‘transports’, [ ‘websocket’, ‘flashsocket’, ‘htmlfile’, ‘xhr-polling’, ‘jsonp-polling’ ]); 还是不行啊囧。。。我听一些人说是 socketio的版本问题,可是我用的cdn啊,这也能有版本问题么
@jtyjty99999 我用的代码是这个, 不知道你那行不行的
@jiyinyiyong 还是不行,我觉得,我一直没理解这个 client 端的含义,这个client端,你通常是部署在哪的呢?怎样访问?
@jtyjty99999 我一般 Nginx 跑网页, 然后直接从 JS 访问 Node 跑的端口. (虽然允许任意连接有点安全隐患…)
@jiyinyiyong 照着socketio官网的例子配合express做了socketio.js的服务器终于可以了。。但是坑还没解决,先留着吧。。感谢。。。