expressjs 的 socket.io 设置

Posted

技术标签:

【中文标题】expressjs 的 socket.io 设置【英文标题】:socket.io setting for expressjs 【发布时间】:2016-12-26 18:36:24 【问题描述】:

我只是尝试使用“Socket.io” 对于初始设置,文档说下面的代码

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个问题。

    require('http').Server(app) => 为什么我需要把 app 作为 Server 的参数? 为什么我必须使用 server.listen() 而不是 app.listen() ??

查了node.js和express.js的文档,看不懂……

非常感谢您的完整解释...

【问题讨论】:

【参考方案1】:

您的原始代码使用 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 请求,快速应用程序优先于套接字服务器。

【讨论】:

感谢您的帮助。

以上是关于expressjs 的 socket.io 设置的主要内容,如果未能解决你的问题,请参考以下文章

socket.io+redis+expressjs 集群 - 在 expressjs 请求中获取套接字对象

expressJS 和 socket.io 监听不同的端口和 socket.io 客户端连接

带有 socket.io 和 expressjs 的节点集群

我的 ExpressJS 网站和 socket.io 端口可以使用相同的端口吗?

如何在同一个端口上使用 ExpressJS 和 Socket.io?

在 ExpressJS 中将 socket.io 实现为子模块的最佳方法是啥?