作者:EIght_16 | 来源:互联网 | 2023-09-02 13:54
所以我有这个非常基本的socket.io设置,你可能已经看过很多次了.
请注意,这里的文件是通过apache提供的.
服务器(app.js)
var io = require('socket.io').listen(8080);
io.sockets.on('connection', function(socket){
socket.emit('server ready', {msg: 'hi'}) ;
socket.on('random event', function(data) {
console.log('received');
})
});
和客户
$(document).ready(function() {
var socket = io.connect('http://127.0.0.1:8080/projectname/server/');
socket.on('server ready', function(data){
console.log('server ready!');
});
socket.emit('random event', {hurr: 'durr'});
});
但是,我得到的唯一输出是
debug - websocket writing 5:::{"name":"server ready","args":[{"msg":"hi"}]}
在节点控制台中,客户端控制台中没有任何内容.哪个错了.
我已经尝试了socket.io网站上的基本示例,它显示了完全相同的行为.它将发出的数据记录在节点控制台中,但似乎没有其他任何事情发生.
编辑:进一步调查后,在Firefox中访问该站点会在节点控制台中创建不同的输出:
info - handshake authorized 178702677759276313
debug - setting request GET /socket.io/1/xhr-polling/178702677759276313?t=1339080239192
debug - setting poll timeout
debug - client authorized for
debug - clearing poll timeout
debug - xhr-polling writing 1::
debug - set close timeout for client 178702677759276313
debug - xhr-polling received data packet ?17?1::/stock/server/?66?5::/stock/server/:{"name":"random event","args":[{"hurr":"durr"}]}
debug - setting request GET /socket.io/1/xhr-polling/178702677759276313?t=1339080239263
debug - setting poll timeout
debug - clearing poll timeout
debug - xhr-polling writing 5:::{"name":"server ready","args":[{"msg":"hi"}]}
这看起来像客户端实际到达服务器的数据.但是,它似乎没有解决实际问题:console.log行以及客户端和服务器端都没有执行.此输出来自Firefox 5.0.1,它似乎可以回退到xhr.
非常感谢提前!
解决方法:
如果你的项目名称是库存,那那就是你的问题. Socket.IO认为你正在使用namespace.你可以在xhr-polling收到的数据包日志行中看到这一点.从不调用console.log,因为您没有在服务器端侦听该命名空间.
您应该从客户端连接地址中删除/ projectname / server并正确引用客户端库,这样就不会得到404.无论是Apache代理问题还是修复头文件src都取决于您当前的设置.我从你提供的代码中无法分辨出来.
PS:Socket.io应该在http://127.0.0.1:8080/socket.io/socket.io.js上为客户端库提供服务,但是你可能会通过从文档中引用该资产来遇到跨域原始策略问题您的apache服务器在端口80提供服务.快速修复可能是从您的apache服务器提供客户端lib,该服务器位于socket.io-client模块dist文件夹中.