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

Posted

技术标签:

【中文标题】expressJS 和 socket.io 监听不同的端口和 socket.io 客户端连接【英文标题】:expressJS and socket.io listening to different ports and socket.io client connect 【发布时间】:2017-06-03 21:22:14 【问题描述】:

所以我有一个使用 socket.io 和 expressjs 的 nodejs 应用程序

我将端口“3000”用于 express 应用程序,将端口“8080”用于套接字应用程序

    这两种服务是否可以使用相同的端口?(express 和 socket.io)

    当我想从客户端连接到套接字时,我使用以下代码:

    var socket = io('http://localhost:8080')

什么是正确的连接方式(我在互联网上的教程中看到了各种方式)并且不知道。

【问题讨论】:

我不知道它是否有帮助,但您可能想通过回答 ***.com/questions/48198835/socket-io-404-error/… 来检查这个类似的问题 尝试关闭你的 mamp 或 xampp 【参考方案1】:

这两种服务是否可以使用相同的端口?(express 和 socket.io)

是的

var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

server.listen(8080); //or 3000

当我想从客户端连接到套接字时,我使用以下代码:

在前端:

包括socket.io

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:8080'); //or 3000
</script>

编辑: 没有快递

var app = require('express').createServer();
var io = require('socket.io')(app);

app.listen(8080);

欲了解更多信息socket.io

【讨论】:

socket.io需要使用http模块还是可以使用express? 对于socket,你需要安装socket.io,对于express,你需要express var server = require('http').createServer(app); var io = 要求('socket.io')(服务器);。我的意思是。我需要 http 模块吗?我可以使用 'var up=require ('socket.io').(app)【参考方案2】:

是的,两者都可以使用相同的端口。实际上,当客户端发送请求时,您应该使用相同的端口使客户端连接到您的 Web 套接字。 Socket.io 文档有关于如何使用 express 连接的教程。

来自socket.io docs的代码:

var app = require('express').createServer();
var io = require('socket.io')(app);

app.listen(80);

app.get('/', function (req, res) 
  res.sendfile(__dirname + '/index.html');
);

io.on('connection', function (socket) 
  socket.emit('news',  hello: 'world' );
  socket.on('my other event', function (data) 
    console.log(data);
  );
);

如果你想用 express-generator 生成的模板连接套接字,你可以这样: *** post

【讨论】:

以上是关于expressJS 和 socket.io 监听不同的端口和 socket.io 客户端连接的主要内容,如果未能解决你的问题,请参考以下文章

ExpressJS - 带有路由分离的 Socket.IO

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

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

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

expressjs 的 socket.io 设置

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