【发布时间】:2018-05-14 16:55:01
【问题描述】:
我的问题是我可以在不使用 express 的情况下运行 socket.io 库吗?问题是我想让节点作为一个外部 Web 套接字服务器,它只接收套接字连接和回调,只是简单地回复它们,而不是制作自己的路由或发送页面视图(我正在使用 codeigniter 来完成这项工作)。
我目前在服务器上的测试应用是这样的:
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 4000;
server.listen(port, function() {
console.log('Server listening at port %d', port);
});
io.on("connection", function (socket) {
console.log('A new socket has joined: ' + socket.id);
var tweet = {user: "nodesource", text: "Hello, world!"};
// to make things interesting, have it send every second
var interval = setInterval(function () {
socket.emit("tweet", tweet);
}, 1000);
socket.on("disconnect", function () {
clearInterval(interval);
});
});
在客户端:
<script>
const socket = io('http://localhost:4000/node_server');
socket.on('disconnect',function(){
alert('Im not connected, server is down');
});
socket.on("tweet", function(tweet) {
// todo: add the tweet as a DOM node
console.log("tweet from", tweet.username);
console.log("contents:", tweet.text);
});
我的问题是我已经用 express 测试了 socket.io 的聊天示例,它可以工作,但他们使用路由并发送页面,在我的情况下,我只希望我的其他外部页面与节点通信,而不是节点发送我的页面。基本上,当我在服务器或客户端触发一些发射或功能时,它不会仅在服务器连接上触发,而不会触发其他任何东西(ps:也使用了 io.sockets.on 并且也不起作用) 如果有人通过了这个并且知道我的问题可能是什么,我会很高兴。
【问题讨论】:
-
如果您将此应用程序设置为一个单独的应用程序,那么您使用的服务器软件真的很重要吗?另外,您为什么要听
http://localhost:4000/node_server而不是http://localhost:4000?一个普通的 http 服务器会很痛苦。 -
因为实际的客户端是位于另一个文件夹中的 index.html,而 node_server 实际上是 index.js 和节点模块能够启动服务器的位置。事情不是这样,事情是套接字连接并且您看到在节点控制台上触发的事件意味着套接字在服务器端连接,但它不会触发客户端连接函数,也不会触发我放在那里的回调和我已经测试了一些
-
客户端的文件夹/文件在同一个主机上,但很快就会是不同的主机,但问题不是路径,真的是当我有一个稳定的连接时触发器不起作用
-
另一件事,客户端 socket.connected 返回 false 表示套接字未连接,但在服务器中它注册并触发连接,所以我无法了解发生了什么
-
我认为可能会有一些混乱,但据我所知,您似乎只想将客户端与服务器分开,因为它们托管在两台不同的机器上。是这样吗?如果是这样,我可以为你写一个简单的例子。
标签: javascript node.js sockets socket.io