Javascript Laravel Homestead,Socket.io连接被拒绝
我正在使用laravel事件广播、socket.io、node.js和redis实时向客户端传递通知 代码相当简单,当我向服务器上的“/”发出get请求时,将触发一个事件,并将一些数据广播到在某个频道(测试频道)上侦听此事件的所有浏览器(客户端) Routes.php内容:Javascript Laravel Homestead,Socket.io连接被拒绝,javascript,php,laravel,socket.io,homestead,Javascript,Php,Laravel,Socket.io,Homestead,我正在使用laravel事件广播、socket.io、node.js和redis实时向客户端传递通知 代码相当简单,当我向服务器上的“/”发出get请求时,将触发一个事件,并将一些数据广播到在某个频道(测试频道)上侦听此事件的所有浏览器(客户端) Routes.php内容: Route::get('/', 'uses' => function () { Event::fire( new App\Events\UserHasRegistered('DummyData') );
Route::get('/', 'uses' => function () {
Event::fire( new App\Events\UserHasRegistered('DummyData') );
return view('test');
}]);
UserHasRegistered事件类:
class UserHasRegistered extends Event implements ShouldBroadcast{
use SerializesModels;
public $name;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($name){
$this->name = $name;
}
/**
* Get the channels the event should be broadcast on.
*
* @return array
*/
public function broadcastOn(){
return ['test-channel'];
}
}
节点服务器文件内容:
/*General Configurations :
- Setting up the node Server
- Server side Socket.io
- node js Redis Client
- instance of ioredis
*/
var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();
/*listen to a channel , and when a Message Arrives we send it to All Listening clients via socket.io*/
redis.subscribe('test-channel');
redis.on('message' , function(channel , message){
message = JSON.parse(message);
// The Client Side Channel naming conversion => channelName:EventPublishedToServer => testChannel:UserHasRegistered
io.emit(channel + ':' + message.event , message.data );
});
/*Booting Up the Server : port 3000 */
server.listen(3000 , function(){
console.log('The Server Is Running');
});
一切正常,数据通过redis传递到节点服务器,但在客户端,我使用socket.io监听特定的通道,出现了一个奇怪的错误
获取网络::错误连接被拒绝
客户端:
<script type="text/javascript" src="/js/socket.io.js"></script>
<script>
/*Homestead IP Address , Port:3000 Node Server Port*/
var socket = io('http://192.168.10.10:3000');
/*When Data is sent to client side*/
socket.on('test-channel:App\\Events\\UserHasRegistered' , function(data){
console.log(data);
//$('ul').append('<li><h5>'+ data.name +'</h5></li>');
});
</script>
/*宅地IP地址,端口:3000节点服务器端口*/
变量套接字=io('http://192.168.10.10:3000');
/*当数据发送到客户端时*/
socket.on('test-channel:App\\Events\\userhasregisted',函数(数据){
控制台日志(数据);
//$('ul').append(''+data.name+' ');
});
我正在使用Windows10和Homestead虚拟盒
有什么帮助吗?你试过了吗
<script type="text/javascript" src="/js/socket.io.js"></script>
<script>
/*Homestead IP Address , Port:3000 Node Server Port*/
var socket = io.connect('http://192.168.10.10:3000');
/*When Data is sent to client side*/
socket.on('test-channel:App\\Events\\UserHasRegistered' , function(data){
console.log(data);
//$('ul').append('<li><h5>'+ data.name +'</h5></li>');
});
</script>
/*宅地IP地址,端口:3000节点服务器端口*/
var socket=io.connect('http://192.168.10.10:3000');
/*当数据发送到客户端时*/
socket.on('test-channel:App\\Events\\userhasregisted',函数(数据){
控制台日志(数据);
//$('ul').append(''+data.name+' ');
});
您是否尝试通过“vagrant ssh”将ssh连接到您的虚拟机并从那里启动服务器文件?当我从windows或git命令启动服务器文件时,A遇到了同样的问题,我在VirtualBox中打开3000端口解决了这个问题。为此,您应该进入adn内的homestead设置,然后进入Network->Port Forwarding,在两个端口上都设置3000。是的,我设置了。。还是不走运,我认为这与homestead和nodejs服务器端口有关,因为我确实使用WAMP在homestead之外运行了这段代码,它确实工作了,所以代码没有问题嘿,检查第二个答案,这是正确的!请确保标记它,以便您可以帮助其他人,就像它帮助了我一样。我如何做到这一点?\Hi@JordyGroote,至少在Windows计算机上,打开VirtualBox,选择您的家园计算机,单击设置,然后单击网络,单击高级,选择端口转发,最后添加新的tcp规则,主机端口为3000,来宾端口为3000。告诉我你有什么问题。