2016-08-19 73 views
0

我只是試圖用「Socket.io」 對於初始設置,文件說下面socket.io設置expressjs

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 

server.listen(80); 

的代碼,這是我的原代碼。

var app = require('express')(); 
app.listen(80); 

兩者有什麼區別? 具體2個問題。

  1. require('http')。Server(app)=>爲什麼我需要將應用程序作爲Server的參數?
  2. 爲什麼我必須使用server.listen()而不是app.listen()?

我擡頭的Node.js和express.js的文檔,但無法理解......

我會非常感激你的完整的解釋...

回答

5

你的原代碼使用Express爲您創建HTTP服務器。你可以做app.listen()的原因是因爲它也返回服務器實例,它本質上是一個方便的方法:

app.listen = function() { 
    var server = http.createServer(this); 
    return server.listen.apply(server, arguments); 
}; 

在你的榜樣初始設置爲簡寫:

var http = require('http'); 
var server = http.createServer(); 
var express = require('express'); 
var app = express(); 
var socketio = require('socket.io'); 
server.on('request', app); 
var io = socketio(server); 

server.listen(80); 

在此示例中,您正在爲Web套接字創建一個新的連接服務器,並將其自身集成到http服務器中。你傳遞app作爲Server參數的原因是,快速應用優先於典型的http請求的套接字服務器。

+0

謝謝你的幫助。 – Kwang