Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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
Javascript 如何结合使用Socket.io和Express.JS(使用Express application generator)_Javascript_Node.js_Express_Socket.io - Fatal编程技术网

Javascript 如何结合使用Socket.io和Express.JS(使用Express application generator)

Javascript 如何结合使用Socket.io和Express.JS(使用Express application generator),javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我正在尝试将Socket.io与Express.JS结合使用(使用Express application generator)。 我找到了一些关于如何执行此操作的问题()。我的问题是无法使用routes文件夹中的套接字。 我可以在app.js和bin/www.js文件中使用它们。当我调用route index.js时,它会持续加载网页很长一段时间,而不会给出任何错误。 bin/www.js ... /** * Create HTTP server. */ var server = http

我正在尝试将Socket.io与Express.JS结合使用(使用Express application generator)。
我找到了一些关于如何执行此操作的问题()。
我的问题是无法使用routes文件夹中的套接字。 我可以在app.js和bin/www.js文件中使用它们。当我调用route index.js时,它会持续加载网页很长一段时间,而不会给出任何错误。

bin/www.js

...
/**
 * Create HTTP server.
 */

var server = http.createServer(app);

var io     = app.io
io.attach( server );
...
...
// Express
var app = express();

// Socket.io
var io = socket_io();
app.io = io;
var routes = require('./routes/index')(io);
...
module.exports = function(io) {
    var app = require('express');
    var router = app.Router();

    io.on('connection', function(socket) {
        console.log('User connected');
    });

    return router;
}
app.js

...
/**
 * Create HTTP server.
 */

var server = http.createServer(app);

var io     = app.io
io.attach( server );
...
...
// Express
var app = express();

// Socket.io
var io = socket_io();
app.io = io;
var routes = require('./routes/index')(io);
...
module.exports = function(io) {
    var app = require('express');
    var router = app.Router();

    io.on('connection', function(socket) {
        console.log('User connected');
    });

    return router;
}
routes/index.js

...
/**
 * Create HTTP server.
 */

var server = http.createServer(app);

var io     = app.io
io.attach( server );
...
...
// Express
var app = express();

// Socket.io
var io = socket_io();
app.io = io;
var routes = require('./routes/index')(io);
...
module.exports = function(io) {
    var app = require('express');
    var router = app.Router();

    io.on('connection', function(socket) {
        console.log('User connected');
    });

    return router;
}

下面是一个关于如何将Socket.io与我在GitHub上提供的Express一起使用的简单示例:

后端代码如下所示:

var path = require('path');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', (req, res) => {
  console.error('express connection');
  res.sendFile(path.join(__dirname, 'si.html'));
});
io.on('connection', s => {
  console.error('socket.io connection');
  for (var t = 0; t < 3; t++)
    setTimeout(() => s.emit('message', 'message from server'), 1000*t);
});
http.listen(3002, () => console.error('listening on http://localhost:3002/'));
console.error('socket.io example');
然后,我使用该应用程序创建一个http服务器,其中包含:

var app = require('express')();
var http = require('http').Server(app);
最后,我使用该http服务器创建Socket.io实例:

var io = require('socket.io')(http);
运行后:

http.listen(3002, () => console.error('listening on http://localhost:3002/'));
这一切共同作用


您可以在GitHub上看到完整的示例,其中后端和前端代码都有效。它目前使用的是Express 4.14.0和socket.io 1.4.8。

适用于仍希望使用socket.io和Express http请求的用户。最简单的方法是创建http服务器的两个seprate实例,并将其列示到不同的端口。WebSocket为1,api请求为2

const express = require("express");
const app = express();
const httpServer = require("http").createServer(app);
const io = require("socket.io")(httpServer, {
    path: '/'
});

// routes and io on connection

httpServer.listen(5000, () => {
   console.log("Websocket started at port ", 5000)
});

app.listen(3000, () =>{
   console.log("Http server listening at", 3000)
})

我下面的回答对你有帮助吗?有什么评论吗?如果它帮助了你,那么你可以考虑其他搜索它的人可以看到它有一个被接受的答案。如果我正确地理解你的答案,我们可以将Socket、IO事件和HTTP请求合并到同一个节点Express服务器上。