我观看了有关websockets(socket.io)的laracast视频,并亲自尝试过。在localhost上工作正常,但是当我尝试在服务器上运行时,我只是出错。
我的 socket.js:
var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('report-created');
redis.on('message', function(channel, message){
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});
server.listen(3000);
客户端:
<script>
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
});
var socket = io('IPFromServer:3000');
new Vue({
el: 'body',
data: {
reports: []
},
ready: function(){
socket.on('report-created:App\\Events\\ReportCreated', function(report){
console.log(report["reportCreated"]);
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
});
window.location.replace("http://autoreport.dev/fileentry/get/" + report["reportCreated"]);
}.bind(this));
}
});
</script>
就像我说的,它正在使用Localhost就好了,但不是在服务器上我总是收到此错误消息:
GET ...socket.io/?EIO=3&transport=polling&t=1446734287420-0 net::ERR_CONNECTION_TIMED_OUT socket.io.min.js:1
我google了很多,但找不到任何答案。也许你们中的一些人知道解决方案。
问候
答案 0 :(得分:1)
在服务器脚本更改
server.listen(3000);
的
server.listen(3000,'0.0.0.0')
在客户端脚本中更改
var socket = io('IPFromServer:3000');
的
var server = 'IPFromServer:3000',
socket = io.connect(server);
确保服务器字符串正确