4

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

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"
  }
}
4

3 回答 3

2

你面临的问题是你决定给你和未完成的、不完整的 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。这是使用 Primus + Engine.IO 创建 Socket.IO 的工作克隆的示例https://gist.github.com/3rd-Eden/6113494

于 2013-09-19T11:16:48.043 回答
0

您需要将 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);
于 2013-09-19T09:23:35.807 回答
0

你可以检查这个有完整的 socket.io v1.0 实现的存储库。虽然它与 express v4.0 一起使用。

https://github.com/theoctal/livenote

于 2014-04-30T08:27:30.500 回答