我真的是 node.js 的新手,如果有人能够帮助我,我将非常高兴。
我有一个 web 应用程序,在 tomcat 上,所以我使用的访问端口是 8080。 在我的一个 html 页面上,我试图实现的功能是当我单击特定按钮时,我想向访问该页面的任何人发送通知,然后这些用户将执行相关操作。 所以实际上,我想使用 node.js 作为通知服务器,使用 socket.io ,这就是我在服务器端所做的:
var io = require('socket.io').listen(3000);
io.on('connection', function (socket) {
console.log("A new connection was opened");
socket.on('status change', function(data) {
console.log('status has changed to ' + data);
io.sockets.emit('set new status', data);
});
socket.on('disconnect', function () {
io.emit('user disconnected');
});
});
在客户端,我在我的 html 页面上进行了配置,它位于我的 tomcat 服务器上,我做了以下操作(我只是从我的 html 中放了一些相关的部分):
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8000/');
socket.on('set new status', function(data){
myFunction();
});
$("#button").click(function()
{
socket.emit('status change', isOn);
});
</script>
因此,当我打开我的 html 页面时,出现以下错误:
获取 http://localhost:8080/socket.io/socket.io.js
当然,如果我的 Web 应用程序在端口 3000 上运行,这是可以访问的。
我怎样才能让它工作?! 我确信我错过了一些非常愚蠢的东西,并且白白浪费了几个小时。
谢谢!
最佳答案
问题是您的 tomcat 服务器没有重定向到 socket.io 库的 Node.js 服务器。我不是 tomcat 专家,所以我会链接 https://serverfault.com/questions/55427/redirecting-tomcat-requests-to-another-host作为寻找解决方案的可能场所。
你想要做的是设置它,以便当请求进入 tomcat 时/socket.io/socket.io.js 它转发到:3000/socket.io/socket.io.js
您还需要为任何其他需要提供服务的 Assets 执行此操作。可能值得设置一个子文件夹来提供服务。
您可以做的另一件事是从 Node.js 本身提供全部内容。
我们使用 Hapi,我可以向您介绍一些使用它构建的聊天应用程序,或者查看 Socket.io 页面本身以获取聊天应用程序的完整 Node 实现。如果您使用 Express 或只想使用 Node,那么那里有资源,但我手边没有准备好:D
关于node.js - 获取 socket.io.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32364672/