Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js socket.io在客户端不工作(传输错误)_Node.js_Sockets_Laravel 5 - Fatal编程技术网

Node.js socket.io在客户端不工作(传输错误)

Node.js socket.io在客户端不工作(传输错误),node.js,sockets,laravel-5,Node.js,Sockets,Laravel 5,我试图通过遵循教程来实现套接字。 我让node.js运行,reddis工作,端口3000正在监听。我可以在命令行上获取控制台消息。当我尝试向客户端发送任何内容时,就会出现问题。 服务器端: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var Redis = require('ioredis'); var redis = ne

我试图通过遵循教程来实现套接字。 我让node.js运行,reddis工作,端口3000正在监听。我可以在命令行上获取控制台消息。当我尝试向客户端发送任何内容时,就会出现问题。 服务器端:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('test-channel', function(err, count) {
});
redis.on('message', function(channel, message) {
    console.log('Message Recieved: ' + message);
    message = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
});
http.listen(3000, function(){
    console.log('Listening on Port 3000');
});
客户端:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.7/socket.io.min.js"></script>
<script>
    var socket = io('http://localhost:3000');
    //var socket = io('http://192.168.10.10:3000');
    socket.on("test-channel:App\\Events\\EventName", function(message){
        console.log("Working");
        // increase the power everytime we load test route
        $('#power').text(parseInt($('#power').text()) + parseInt(message.data.power));
    });
我尝试了所有可用的示例,也尝试了socket.io网站上的基本示例,但没有任何效果。感谢您的帮助。谢谢

经过几天的挖掘,我发现socket.io在本地主机上工作得非常好,但在外部域中不起作用。我也试着改变

var socket = io('http://localhost:3000');

但这没有帮助。Chrome浏览器显示错误:

GET http://serverip:3000/socket.io/?EIO=3&transport=polling&t=LDrVJCA Request.create @ socket.io.min.js:1Request @ socket.io.min.js:1XHR.request @ socket.io.min.js:1XHR.doPoll @ socket.io.min.js:1Polling.poll @ socket.io.min.js:1Polling.doOpen @ socket.io.min.js:1Transport.open @ socket.io.min.js:1Socket.open @ socket.io.min.js:1Socket @ socket.io.min.js:1Socket @ socket.io.min.js:1Manager.open.Manager.connect @ socket.io.min.js:2(anonymous function) @ socket.io.min.js:3
feedTest:1 XMLHttpRequest cannot load http://serverip:3000/socket.io/?EIO=3&transport=polling&t=LDrVJCA. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.com' is therefore not allowed access. The response had HTTP status code 502.
我真的很感激任何帮助。谢谢这是因为

您可以使用jsonp来避免它:

    $.ajax({
       type: "POST",
       dataType: 'jsonp',
       ...... etc ....
     })
编辑

var socket = io('http://localhost:3000',{origins:'localhost:* http://localhost:* http://www.localhost:*'});
对于套接字io,请执行以下操作:

var socket = io('http://localhost:3000');
socket.set("origins","*");
编辑

var socket = io('http://localhost:3000',{origins:'localhost:* http://localhost:* http://www.localhost:*'});

var socket = io('http://localhost:3000',{origins:"*"});

在laracasts.com的帮助下,我设法解决了这个问题。端口3000因宣传而关闭,这就是为什么它只在本地主机上工作。感谢alexey的帮助。

我不知道在哪里插入建议的代码,请提供完整的示例。Thankssocket.set不是在socket 1.x版本中删除的函数。你还有什么建议吗?提前谢谢。你可以试着在init中通过它,请参阅答案谢谢你的回复。那是行不通的。有人建议像这样包含js文件:这给我带来了另一个问题http://[serverip]:3000/socket.io/?EIO=3&transport=polling&t=LDwKOFz net::ERR\u CONNECTION\u TIMED\u OUT奇怪的是,它在本地主机上工作正常。你还有什么建议吗?谢谢
var socket = io('http://localhost:3000',{origins:"*"});