通过Web套接字连接到node.js服务器(服务器不提供页面)

时间:2014-12-17 16:45:20

标签: node.js sockets socket.io

我正在尝试通过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' });
});

由于

1 个答案:

答案 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