http连接请求和socket.io连接之间的区别

时间:2013-04-12 16:18:56

标签: node.js socket.io

所有

我是node.js和socket.io的新手,并且不知道协议是如何工作的。但我正在学习。

我有一个关于socket.io的初学者问题,如果我从一些教程获得代码,如:

var http = require('http');
var fs = require('fs');

var app = http.createServer(
        function(request, response){
            console.log("New Connection!");
            fs.readFile(
                "client.html","utf-8", 
                function(err, data){
                    response.writeHead(200, {'Content-Type':'text/html'});
                    response.write(data);
                    response.end();
                }
            );
        }
).listen(1337);



var io = require('socket.io').listen(app);

io.sockets.on(
            'connection',
            function( socket ){
                socket.on(
                        'message_to_server',
                        function(data){
                        io.sockets.emit('message_to_client',{message: data['message']});
                        }
                );
            }
);

我的问题是有人能告诉我这段代码是如何工作的吗?我感到困惑的是:

看起来socket.io只是包装应用程序,发送和接收事件消息并进行回调。但我想知道为什么这些动作不会使应用程序的请求事件发生变化,我把console.log(“New Connection!”);在该回调中,它只在我输入服务器地址并在浏览器中输入时显示,但是当我按下发送按钮时,它不会显示任何内容?

这是我的客户代码:

<!DOCTYPE html>

<html>
    <head>
        <script src="/socket.io/socket.io.js"></script>
        <script type="text/javascript">
            // Out client code here.
            var socketio = io.connect("192.168.1.150:1337");
            socketio.on(
                    'message_to_client',
                    function(data){
                        document.getElementById("chatlog")
                        .innerHTML=
                        ("<hr/>"+data['message']+document.getElementById("chatlog").innerHTML);
                    }
            );

            function sendMessage(){
                var msg = document.getElementById("message_input").value;
                if(msg!=""){
                    socketio.emit("message_to_server", {message:msg});
                }
            }
        </script>
    </head>
    <body>
        <input type="text" id="message_input" />
        <button onclick="sendMessage()">SEND</button>
        <div id="chatlog"></div>
    </body>
</html>

1 个答案:

答案 0 :(得分:4)

在您的代码中app是一个http服务器,io是一个websocket服务器。如您所知,http服务器提供http请求,而websocket服务器使用websocket协议。检查wiki

  • http://是http协议,https://是http安全协议
  • ws://是Web套接字协议,wss://是Web套接字安全协议

这是做什么

var app = http.createServer(
    function(request, response){
        console.log("New Connection!");

它启动一个http服务器并在每个http请求上执行给定的函数。对您而言,它会打印New Connection并发送client.html。

这是做什么

var io = require('socket.io').listen(app);

它告诉套接字服务器挂钩到http服务器。它侦听与http / https服务器相同的地址和端口,用于websocket连接。

这是做什么

var socketio = io.connect("192.168.1.150:1337");

在192.168.1.150:1337连接到websocket服务器并使用套接字进行通信。当你点击发送时,你说什么都没有显示,你使用了正确的地址吗?试试这个,它会自动获取地址(正在使用中):

var socketio = io.connect("");