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 端口可以使用相同的端口吗?