【问题标题】:Socket.io polling 404 in LaravelLaravel 中的 Socket.io 轮询 404
【发布时间】:2014-09-30 23:48:38
【问题描述】:

我正在尝试使用 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') }}

CDN 版本的 Socket.io 不断地给出这些类型的日志:

"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');
});

//当我在日志中输入全局“socket”对象时,它会说:

connected: false
disconnected: true

【问题讨论】:

  • 你不能在同一个端口上服务两个应用程序。
  • 我现在更改了 Socket.io 的端口号,它现在显示:“已连接客户端”。使用 Blubberguy22 的代码。所以我想我现在准备好了 :) 谢谢^^
  • 是的。这可能是因为 8000 是一个比较常见的端口,它被其他一些应用程序所取代。

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


【解决方案1】:

这是因为您设置不正确。我遇到了与您完全相同的问题(相同的错误和基本代码布局)。您需要在页面的基本目录中执行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);。对于依赖项,请使用:&lt;script src="//cdn.socket.io/socket.io-1.0.0.js"&gt;&lt;/script&gt;。然后,要运行您的服务器,请在终端中转到它并输入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
});

【讨论】:

  • 我更改了你所说的代码(并使用 CDN 版本),它仍然给我轮询传输 404 问题。
  • 你能把你的新代码贴在你的旧代码下吗?
  • 如果 socket.io 试图向那个 URL 发出 ajax 请求,那么 Web 套接字连接可能没有正确打开。检查上面@Blubberguy22 提到的服务器代码。
猜你喜欢
  • 2016-02-15
  • 2021-09-24
  • 1970-01-01
  • 2018-01-13
  • 2021-02-04
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多