【问题标题】:Let socket and http server listen to same port让socket和http服务器监听同一个端口
【发布时间】:2017-03-30 09:52:24
【问题描述】:

我制作了一个网站,它必须与服务器进行实时通信。实时我的意思是如果用户对一个主题进行投票,所有连接的客户端都必须看到新的平均投票数。

我尝试了一些方法,但我遇到了这个问题:如何创建一个套接字服务器和一个 HTTP 服务器来侦听与 Node.JS 相同的端口?如果我在下面运行代码,我有这个异常:

错误:听EADDRINUSE

这是我的服务器代码:

let port = 8080;

const httpServer = require('http'),
      app = require('express')(),
      socketServer = http.Server(app),
      io = require('socket.io')(httpServer);

httpServer.createServer(function (req, res) {
    console.log('http server created on 8080');
}).listen(port);

socketServer.listen(port, function(){
    console.log('listening on 8080');
});

提前致谢

【问题讨论】:

  • 你不能。这没有意义。 TCP 可以防止您以这种方式在自己的脚下开枪。

标签: node.js sockets socket.io httpserver


【解决方案1】:

看起来你想要类似这样的东西:

const port = 8080;

let app    = require('express')();
let server = app.listen(port);
let io     = require('socket.io')(server);

这会将一个 Express 应用程序和一个 socket.io 服务器附加到同一个 HTTP 服务器(由 app.listen() 返回)。这就是您在同一端口上同时运行应用程序和 socket.io 服务器的方式。

【讨论】:

  • 两台服务器(http & socket.io)如何在同一个端口上运行?据我所知,只有一个应用程序/服务器可以在系统的端口上打开。您能否解释一下:httpserver 和 socket.io 是否相关或相互通信或使用相同端口的独立应用程序?这超出了我的想象..
  • @OwlR socket.io 使用 Express 的 HTTP 服务器来拦截和处理它需要运行的特定请求。因此,两个应用程序服务器使用一个 HTTP 服务器:Express 和 socket.io
  • hmm.. 不清楚拦截是如何工作的,但仍然有想法..httpserver 应该与 socket.io 通信以让它处理一些功能......可能正在研究 socket.io 代码可能会给出一些更多细节
猜你喜欢
  • 2011-05-20
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多