繁体   English   中英

socket.io与express.js的混淆

[英]socket.io confusion with express.js

服务器端代码:

var server = require("http").Server(express);  
var io = require("socket.io")(server);
server.listen(5000);

io.on('connection', function(client) {

  client.on('order', function(data) {
      io.emit('place_order',data); 
  });
});

边码

var socket = io.connect('http://localhost:5000');
 socket.on('place_order', function (data) {alert('data.x')})

我在github的某个地方git clone一个项目,我看到了上面的东西。 服务器端代码的第三行使我感到困惑。 为什么作者在这里创建了额外的端口? 舍弃第三行不是很好,而在通知方只需连接到没有端口的路径即可,例如var socket = io.connect('http://localhost:5000'); 需要在这里解释socket.io专家,我很困惑。

顺便说一句,此代码确实有效。

为什么作者在这里创建了额外的端口?

您必须在某个端口上启动服务器,而server.listen(nnn)是实现此目的的一种方法。 如果您不启动服务器,则该服务器实际上并未运行,并且您将永远无法连接到该服务器。

必须先创建服务器,然后在特定端口上启动服务器。

在您的特定代码示例中,您选择在端口5000而不是更常见的端口80上运行服务器。

丢掉第三行不是吗

否。没有它,您的服务器将无法运行。


如果您的服务器在端口80上启动,那么您不必在URL中列出端口号,因为这是http://连接的默认端口号。

socket.io附加到HTTP服务器后,需要启动它。 套接字如何工作。 那就是第三行。 因此,删除它意味着您没有启动服务器本身,显然那是行不通的。

该端口的端口号为5000,这对您来说可能看起来是非常规的,但这是防止PORT 80使用时出错的一种标准做法,就像其他基于Web /互联网的应用程序/服务器经常使用该PORT 80一样。 但是,如果不是这种情况,可以通过将第三行替换为server.listen(80);来将端口更改为server.listen(80);

对于Ref:如果收到错误: Error: listen EADDRINUSE :::80然后直接了解该端口不是免费的!

那不是socket.io的问题。 在Node.js应用程序中,您需要指定要运行Node.js的端口。

Node.js是一个平台,在第一行中,您创建了一个服务器,为此,您需要放置服务器运行的端口。

https://nodejs.org/dist/latest-v6.x/docs/api/http.html#http_http

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM