【问题标题】:Meteor and Socket IO portsMeteor 和 Socket IO 端口
【发布时间】:2017-07-06 16:02:23
【问题描述】:
我已将this 包含在我的项目中,它允许在我的项目中使用socket io 库。我将发布我的部分代码
// Start server
try {
server.listen(8080);
console.log("Server is litsnening for 8080 port");
} catch (e) {
console.error(e);
}
所以你可以看到我的服务器正在监听 8080 端口。问题是当我使用 meteor 命令为我的流星应用程序加注星标时,它在端口 3000 上启动。
http://localhost:3000/ 那么现在我如何告诉客户端连接到 8080 端口呢?如果我可以使用相同的端口,那就太棒了,但这是不可能的。那么服务器是如何监听连接的呢? 3000 还是 8080 端口?
【问题讨论】:
标签:
node.js
meteor
networking
socket.io
port
【解决方案1】:
我从来没有遇到过这个问题,你能仔细检查一下你的启动服务器的代码吗?例如下面
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
app.listen(8001);
【解决方案2】:
我认为你在混淆视听。
使用 socket.io,您将在服务器上打开一个新的侦听端口,因此您的应用程序将公开 2 个端口,一个用于 Meteor,另一个用于 socket.io。
首先,meteor 现在支持 npm 包,因此您可以直接使用 socket.io npm 包(因此您将获得最新版本)。
如果服务器没有记录:
console.log("Server is litsnening for 8080 port");
我会检查您是否真的包含/运行了那段代码,如果您想确定该端口是否打开,请使用所有平台都可用的netstat 命令(根据您的平台检查参数)。在 Linux 中,命令是:
sudo netstat -lp
在您的客户端中,您必须通过以下方式连接到 socket.io 服务器:
var socket = Npm.require('socket.io-client')(url);
socket.on('connect', function(){
console.log("Connected");
});
socket.on('disconnect', function(){
console.log("Disconnected");
})
【解决方案3】:
我有点晚了,但今天我需要在一个流星应用程序中实现 socket.io,我想为两者使用相同的端口
import { WebApp } from 'meteor/webapp';
import socketIO from 'socket.io';
const io = socketIO(WebApp.httpServer);
io.on('connection', function(socket) {
console.log('new socket client');
});
到目前为止,这个解决方案似乎有效,但我不知道这是否是一个好的做法。