我正在尝试通过Web套接字连接到node.js服务器。我遇到的困难是我的节点服务器不提供我的网页。从我看来,我认为socket.io假设服务器将服务于页面,所以我不能使用90%的例子(或者至少我还没弄明白如何)。我试图让这个简单的演示页面连接,但我总是拒绝连接。
<html>
<head>
<title>Title</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
var ws = new WebSocket("ws://my-devbox.local");
</script>
</head>
<body>
<button id="myButton">Click Me Mo Fool!!!</button>
</body>
在我的app.js中,我有以下内容(省略了无关的信息)
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) {
console.log('A new user connected!');
//socket.emit('info', { msg: 'Hello World' });
});
由于
答案 0 :(得分:1)
这里有几个问题。第一个socket.io
不是普通的WebSocket。如果您在服务器端使用socket.io
,则需要在客户端使用socket.io
。它在webSocket之上有自己的协议,因此你必须在连接的两端使用它。
其次,socket.io
(以及任何webSocket连接)通过http请求启动其连接。这意味着它受到同源策略的限制(无法连接到您的网页来源之外的其他来源)。因此,如果要连接到服务于网页的源以外的其他来源,则需要连接到已启用跨源连接的服务器。通过在服务器上执行此操作,可以轻松地为socket.io启用跨源连接:
io.set('origins', '*:*');
有关在此处启用跨源请求的详情:Socket.io + Node.js Cross-Origin Request Blocked和此处:how to set socket.io origins to restrict connections to one url