我是node.js的新手,如果有人能够帮助我,我会非常高兴。
我在tomcat上有一个Web应用程序,所以我使用的访问端口是8080。 在我的一个html页面上,我想要实现的功能是,当我点击一个特定按钮时,我想向访问该页面的任何人发送通知,然后这些用户将执行相关操作。 实际上,我想使用socket.io将node.js用作通知服务器,这就是我在服务器端所做的事情:
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');
});
});
在客户端,我配置在我的tomcat服务器上的html页面上,我做了以下操作(我只是从我的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
当然,如果我的网络应用程序在端口3000上运行,则可以访问它。
我怎样才能让它发挥作用?! 我确信我错过了一些非常愚蠢的东西,并且花费数小时无所事事。
谢谢!
答案 0 :(得分:0)
问题是您的tomcat服务器没有重定向到socket.io库的Node.js服务器。我不是tomcat专家,所以我将https://serverfault.com/questions/55427/redirecting-tomcat-requests-to-another-host作为寻找解决方案的可能位置。
你要做的是设置它,所以当请求进入tomcat for /socket.io/socket.io.js时,它会转发到:3000 / socket.io / socket.io.js
您还需要为需要提供服务的任何其他资产执行此操作。可能值得设置一个子文件夹来提供服务。
您可以做的另一件事就是从Node.js本身提供整个内容。
我们使用Hapi,我可以指出一些使用它构建的聊天应用程序,或者查看Socket.io页面本身,以获得聊天应用程序的完整Node实现。如果您使用Express或只想使用Node,那么那里有资源,但我手边没有准备就绪:D