簡體   English   中英

如何結合Express.JS使用Socket.io(使用Express應用程序生成器)

[英]How to use Socket.io combined with Express.JS (using Express application generator)

我正在嘗試將 Socket.io 與 Express.JS 結合使用(使用 Express 應用程序生成器)。
我發現了一些如何做到這一點的答案( 在 Express 4 中使用 socket.io 和 express-generator 的 /bin/www )。
我的問題是我無法使用路由文件夾內的套接字。 我可以在 app.js 和 bin/www.js 文件中使用它們。 當我調用路由 index.js 時,它只是長時間加載網頁而不會出現任何錯誤。

bin/www.js

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

var server = http.createServer(app);

var io     = app.io
io.attach( server );
...

應用程序.js

...
// Express
var app = express();

// Socket.io
var io = socket_io();
app.io = io;
var routes = require('./routes/index')(io);
...

路線/ index.js

module.exports = function(io) {
    var app = require('express');
    var router = app.Router();

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

    return router;
}

這是我在 GitHub 上提供的有關如何將 Socket.io 與 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');

https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js

正如您在此處看到的,我正在使用以下命令創建 express 應用程序:

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

然后我使用該應用程序創建一個 http 服務器:

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 和表達 http 請求的任何人。 最簡單的方法是創建兩個單獨的 http 服務器實例,列出不同的端口。 1 個用於 websockets,第二個用於 api 請求。

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)
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM