Node.js中express和socket.io的区别

10

我是nodejs编程的新手,正在学习为node开发的各种js。我的问题很基础,请问有人能解释一下express和socketio之间的区别吗?

据我所知,express是中间件,我们可以使用像jade这样的模版引擎将数据推送到浏览器上。那么socketio又是做什么的呢?它是传输层吗?对我来说,理解两者之间的区别以及为什么我们需要在nodejs应用程序中使用express和socket是令人困惑的。


有大量的Socket.IO示例代码,如果你需要的话可以看一下。 - hgoebl
1
node.js是一种服务器端编程语言,与PHP、C#相同。socket.io是专为node制作的HTML5 WebSocket技术(就像Ratchet适用于PHP或SignalR适用于ASP.NET一样)。而Express只是另一个模块。您是仅对node新手还是对编程整体都不熟悉? - thenewseattle
我对编程有一些基本的了解,并且已经编写过PHP代码。我一直在研究nodejs及其周围的各种JavaScript,感到有些不知所措。我之前并不知道Ratchet,它看起来类似于node的socket.io。我最初是在构建一个社交网络网站,但是为了实现动态和聊天功能,有人告诉我使用nodejs会更好。这就是我开始深入研究所有为node构建的新东西的原因。 - Gaurav Mehta
3个回答

16

Express是一种应用服务器。您可以定义路由并编写代码来生成应用程序的页面或API响应。它基本上是一个名为Sinatra的Ruby项目的移植。它适用于传统的请求/响应HTTP模型。

Socket.io可以帮助您实现服务器推送模型,用于实时类型功能,例如警报/通知、聊天或任何您想要进行的更新,如果您希望它们在浏览器中显示而无需等待用户单击“刷新”按钮或类似的操作。


2

Express HTTP服务器提供了客户端到服务器的请求响应模型。

Socket.io实现了客户端和服务器之间的双向通信通道。


1

Socket.io和Express是完全不同的。但是新手容易混淆,因为在大多数在线教程中,人们将应用程序服务器用作Express,双向通信通道用作Socket.io。他们将两个代码放在同一个server.js文件中。让我们看下面的例子(代码摘自著名的在线教程):

const express = require("express");
const app = express();

const port = 3000;
const http = require('http').createServer();

app.use(require('cors')());
const io = require("socket.io")(http, {
   cors: {
       origin: "*",
       methods: ["GET", "POST"]
   }
})
http.listen(port,()=>{
   console.log("server is running on "+port);
})

阅读此代码后,新的节点学习者很容易感到困惑。因此,不需要将两者放在一起。例如,只需从上面的代码示例中删除表达式代码,仍然可以完美运行socketio服务器。
const port = 3000;
const http = require('http').createServer();

const io = require("socket.io")(http, {
   cors: {
       origin: "*",
       methods: ["GET", "POST"]
   }
})
http.listen(port,()=>{
   console.log("server is running on "+port);
})

我不使用express。我个人喜欢将Apache作为我的应用服务器。因此,你可以单独使用任何应用服务器来处理静态请求并充当Web服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接