【问题标题】:Where can I find a working example of socket.io 1.0?我在哪里可以找到 socket.io 1.0 的工作示例?
【发布时间】:2013-09-24 06:50:22
【问题描述】:

我在哪里可以找到结合 express 3.0 的 socket.io 1.0 的工作示例?目前的问题是在我的 index.html 中找不到/socket.io/socket.io.js

var express = require('express')
var http = require('http')
var app = express()

app.configure(function () {
    app.set('port', process.env.PORT || 80);
});


// setup express server
var serv = http.Server(app);

// setup socket io 
var io = require('socket.io')(serv);
app.get('/', function (req, res) {
    res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {
    socket.emit('news', { hello: 'world' });
    socket.on('my other event', function (data) {
        console.log(data);
    });
});

serv.listen(app.get('port'), function () {
    console.log("Express server listening on port " + app.get('port'));
});

这就是我在 index.html 中的内容

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Socket Example</title>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('/');
        socket.on('news', function (data) {
            console.log(data);
            socket.emit('my other event', { my: 'data' });
        });
    </script>
</head>
<body>
    <b>Socket IO</b>
</body>

这就是我在 package.json 中的内容

{
  "name": "socketio",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
      "express": "3.0",
      "socket.io": "LearnBoost/socket.io"
  },
  "scripts": {
    "start": "node app.js"
  }
}

【问题讨论】:

  • 在您的控制台 f12 上,您是否收到任何 404 丢失文件?也不要使用绝对路径尝试相对路径即/socket.io/socketio.js
  • 我尝试了绝对路径和相对路径。也有同样的问题(404)。
  • 好的,那么文件不存在.. 404 表示那里没有物理文件,您是在运行 Web 服务还是节点?是80端口吗?默认情况下,http:// 端口为 80,除非您另外指定。
  • 我正在端口 80 上运行节点。我的所有东西都可以使用我以前的 socket.io 版本。
  • 所以仔细检查文件结构..它的 404 表示没有文件。不是 500,这将是服务器错误。

标签: javascript node.js express socket.io


【解决方案1】:

你面临的问题是你决定你和未完成的、不完整的socket.io 1.0版本。它还没有正式发布(或者它会在 npm 中)。我建议你坚持使用 Socket.IO 的“稳定”版本。

如果您因为新的 engine.io 传输系统而想使用 Socket.IO 1.0,我建议您查看 Primus https://github.com/primus/primus,它包含 socket.io、engine.io、sockjs 等,具有通用接口和插件系统。您可以使用这个插件系统通过使用 engine.io 转换器和一些插件轻松构建自己的 Socket.IO 1.0。这是一个示例https://gist.github.com/3rd-Eden/6113494 使用 Primus + Engine.IO 创建一个 working Socket.IO 的克隆

【讨论】:

  • 感谢 3rdEden,我将如何访问前端的 socket.io.js/primus。我的意思是 socket.io/primus 浏览器端脚本的位置在哪里。
  • 位置是 /primus/primus.js : &lt;script src="/primus/primus.js"&gt;&lt;/script&gt;
【解决方案2】:

您需要将 connect/express 应用程序包装在节点 http.Server 中。

app.listen() 方法是一个方便的方法并返回服务器:

var io = require('socket.io');
var app = connect();
var server = app.listen(80);
io.listen(server);

或以下等效:

var io = require('socket.io');
var http = require('http');
var app = connect();
var server = http.createServer(app);
server.listen(80);
io.listen(server);

Connect 2 / Express 3 可以在不启动 http.server 的情况下创建应用程序,因此您应该组织它来启动或发出。这应该让你回到正轨,如果没有,还有其他选择。

// where this = express();
this.server = this.listen(this.config.port);
console.log('[ ' + this.constants.name + ' ] worker listening on port ' + this.config.port);
this.emit('listen', this.server);

对于带有 server.io 和 Node 的 express 3:REF

var app = require('express')()
  , server = require('http').createServer(app)
  , io = require('socket.io').listen(server);

【讨论】:

  • var serv = http.Server(app); 在我的代码中正是你所说的。将 express 应用程序包装在节点服务器中,或将 express 应用程序作为请求处理程序提供给节点 http 服务器。我直接使用github.com/LearnBoost/socket.io 给出的文档中的代码
  • 好的,当您运行快速服务器时,您是否收到控制台消息?!?
  • Express server listening on port 80 是消息
  • 我正在做你的 poc,但看起来你混合了将服务器发送到 socket.io 而不是快速应用程序功能。它应该是:“您需要将服务器传递给socket.io,而不是快速应用程序功能。”
  • 你试过改变你的socket.io依赖吗?只是出于兴趣!
【解决方案3】:

您可以查看这个拥有完整 socket.io v1.0 实现的存储库。不过是 express v4.0。

https://github.com/theoctal/livenote

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2011-01-17
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多