Socket.io在Laravel中查询404

时间:2014-08-07 16:23:37

标签: node.js sockets laravel express socket.io

我正在尝试使用Socket.io实现聊天应用 进入我的Laravel应用程序。聊天应用程序在它自己的工作正常, 但是我在Laravel工作时遇到了问题。

我尝试在端口8000上提供Laravel,在8000上提供聊天服务器。 我使用Express 4.8.0和Socket.io 1.0.6,Node 0.10.29和nodemon进行测试。

// server.js:

var express = require('express');
var app     = express();
var http    = require("http").Server(app);
var io      = require("socket.io")(http);

http.listen(8000, function () {
 console.log('listening on *:8000');
});

app.use('/', express.static(__dirname + '/public'));
app.get("/*", function (req, res){
 res.sendFile(__dirname + "/index.php");
});

// client.js:

var socket            = io.connect('http://localhost:8000');

// html - 依赖,我尝试了所有这些:

<script src="//cdn.socket.io/socket.io-1.0.0.js"></script>
{{ HTML::script('/socket.io/socket.io.js') }}
<script src="http://localhost:8000/socket.io/socket.io.js" ></script>
<script src="{{asset('/socket.io/socket.io.js')}}"></script>

然后是客户端(自己的代码)

{{ HTML::script('js/client.js') }}

Socket.io的CDN版本不断提供这些日志:

"GET http://localhost:8000/socket.io/?EIO=2&transport=polling&t=1407425555977-15 404 (Not Found)".

其他人只提供了一个未找到js文件的日志:

"GET http://localhost:8000/socket.io/socket.io.js 404 (Not Found)"

//文件夹结构:

  

/公共

     
    

/ JS

         
      

client.js

    
         

/ node_modules

         

server.js

  

任何人都可以看到我能做些什么让它发挥作用吗?

修改 //server.js

var socket  = require('socket.io');
var express = require('express');
var http    = require('http');

var app     = express();
var server  = http.createServer(app);

var io      = socket.listen(server);

io.on('connection', function (socket) {
 console.log("Connected server");
}

server.listen(8000);

// client.js

var socket;
$(document).ready(function () {
 socket            = io.connect('http://localhost:8000');
});

//当我打造全局&#34; socket&#34;日志中的对象说:

connected: false
disconnected: true

1 个答案:

答案 0 :(得分:2)

这是因为您错误地设置了它。我遇到了同样的问题(相同的错误和基本的代码布局)。您需要在页面的基本目录中执行npm install socket.io --save(与index.php文件所在的位置相同)。然后你必须对express(npm install express --save)做同样的事情。您还必须更改服务器代码。从以下位置更改io的创建:

var express = require('express');
var app     = express();
var http    = require("http").Server(app);
var io      = require("socket.io")(http);

要:

var socket = require('socket.io');
var express = require('express');
var http = require('http');

var app = express();
var server = http.createServer(app);

var io = socket.listen(server);

然后删除app.useapp.get,因为不再需要它们来完成此操作。然后在server.js的末尾添加server.listen(8000);。对于依赖项,请使用:<script src="//cdn.socket.io/socket.io-1.0.0.js"></script>。然后,要运行您的服务器,请在终端中转到它并键入node server.js。然后只需与您的客户端连接即可。此外,对于事件,在服务器中,使用:

io.on('connection', function (client) {
    client.on('someEvent', function(someVariables){
        //Do something with someVariables when the client emits 'someEvent'
        io.emit('anEventToClients', someData);
    });
    client.on('anotherEvent', function(someMoreVariables){
        //Do more things with someMoreVariables when the client emits 'anotherEvent'
        io.emit('anotherEventToClients', someMoreData);
    });
});

在您的客户端代码中:

socket.emit('someEvent', variables);
socket.on('anEventToClients', function(something){
    //Code when anEventToClient is emitted from the server
});