Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 Express服务器被套接字阻止_Javascript_Node.js_Sockets_Express_Socketcluster - Fatal编程技术网

Javascript Express服务器被套接字阻止

Javascript Express服务器被套接字阻止,javascript,node.js,sockets,express,socketcluster,Javascript,Node.js,Sockets,Express,Socketcluster,我有一个问题,我正在使用Sockets模块socketcluster server安装一个express服务器,但当我发送http请求时,express在大约20个请求后被阻止,导致Sockets客户端通知他们连接已断开 你遇到什么人了吗?有什么办法可以帮我解决这个问题吗 多谢各位 express.js const http = require('http'), express = require('express'), socket = require('./socket'),

我有一个问题,我正在使用Sockets模块socketcluster server安装一个express服务器,但当我发送http请求时,express在大约20个请求后被阻止,导致Sockets客户端通知他们连接已断开

你遇到什么人了吗?有什么办法可以帮我解决这个问题吗

多谢各位

express.js

const http = require('http'),
 express = require('express'),
    socket = require('./socket'),
    HOST = 'localhost',
    PORT = 8000,
 bodyParser = require('body-parser');

const app = express()

const httpServer = http.createServer(app);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.get('/',(req,res)=>res.send({status:"ok"}))

socket.init(httpServer,HOST,PORT)

httpServer.listen(PORT,HOST);

httpServer.on('listening', () =>{
    console.log('Express server started on port %s at %s', httpServer.address().port, httpServer.address().address);
});
socket.js

const socketClusterServer = require('socketcluster-server')

module.exports = (() => {

    let scServer

    const createInstance = (httpServer, host, port) => {
        if (!scServer)
            scServer = socketClusterServer.attach(httpServer, {host, port});

        scServer.on('connection', function (socket) {
            console.log('socker: ', scServer.clientsCount)

            socket.on('client',getMessageByClient)

        })
    }

    const getMessageByClient = (data) => {
        if (data.channel)
            sendMessage(data.channel, data)
        scServer.removeListener('client', getMessageByClient)
    }

    const sendMessage = (channel, message) => scServer.exchange.publish(channel, JSON.stringify(message))

    const close = () => scServer.close()

    return {
        init: (httpServer, host, port) => createInstance(httpServer, host, port),
        sendMessage: (channel, message) => sendMessage(channel, message),
        close: () => close()
    }
})()

最后,在尝试了多种方法后,您将尝试以下方法解决此问题:

// Environment variables
const { env: { HOST, PORT }} = process

//Create http server
const httpServer = require('http')

//Init express
const express = require('express')
const app = express()

// Here would come express configurations and routes

// Attach express to our httpServer
httpServer.on('request', app)

// Init socket with http server
const socket = require('./socket')
socket.init(httpServer, HOST)

// Init http server
httpServer.listen(PORT, HOST)

httpServer.on('listening', async () => {

   console.info(`Server started on port ${httpServer.address().port} at ${httpServer.address().address}`)
})
目前它工作正常,接收express请求和套接字时没有任何阻塞

我希望这能帮助别人