为什么websocket连接创建不通过http?

时间:2016-10-13 10:12:59

标签: javascript node.js html5 tcp websocket

我翻过websocket和http。

我在下面写了一些例子:

var fs   = require('fs');

var server = http.createServer(function(request, response) {
  console.log ("HTTP Request created...");
  // I am responding something here..
});

server.listen(1234, function() {
   console.log((new Date()) + ' Server is listening on port 1234');
});


var WebSocketServer = require('websocket').server;
wsServer = new WebSocketServer({
            httpServer: server
});

wsServer.on('request', function(re){
        var conn = re.accept(null, re.origin);
            console.log ("Accepted New Connection..");
            conn.on('message', function(message) {
                console.log ('message received' + message.utf8Data);
            });
           });

我试过两种方式连接到这台服务器。

1) Through Browser.
2) through node.js application 

当我尝试通过浏览器ex访问此服务器时:http:IP:1234, 我收到“收到HTTP请求...”的印刷品,就像我尝试的那样 在Node.js中的代码下面,我没有看到这条消息被打印出来。

var WebSocket = require('ws')
  ws = new WebSocket('ws://IP:1234');

    ws.on('open', function() {
            console.log ("WebSocket opened..");
            ws.send('something');
    });
ws.on('message', function(message) {
        console.log('received: %s', message.data);
});

当我尝试通过
连接到网络服务器时     ws = new WebSocket('ws:// IP:1234');

为什么它没有通过HTTP?我的基本理解是 Websocket只是HTTP上的升级,在这种情况下,我会假设WebSocket()依次通过HTTP连接到服务器吗?或者我很困惑?。

1 个答案:

答案 0 :(得分:0)

Websocket请求不会在HTTP服务器实例上触发request事件(您传递给createServer的函数是监听器)。

如果您想在HTTP服务器上观看websocket请求,请收听upgrade个事件:

server.on('upgrade', function (req, socket, head) { ... });

我认为这是因为http将处理握手/升级本身,这是通过不同的事件完成的。