electron 运行http服务,http服务与socket同端口

1. electron/main.js

// main.js页面最下面

// server是 express 脚手架生成的目,bin/www是启动/监听http服务器的代码.
// 把bin/www的www文件后缀加上js,这样可以自动引入
const {socket} =  require('./server/bin/www'); 

2.electron/server/bin/www.js,除去引入的代码,其他代码放入到导出的socket方法内

复制代码
#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('scoket:server');
var http = require('http');
module.exports = {
  socket:function () {

    /**
     * Get port from environment and store in Express.
     */
  
    var port = normalizePort(process.env.PORT || '3000');
    app.set('port', port);
  
    /**
     * Create HTTP server.
     */
  
    var server = http.createServer(app);
  
    /**
     * socket
     */
    const io = require('socket.io')(server);
    io.on('connection', (socket) => {
      console.log(socket);
      socket.on('chat message', msg => {
        console.log(msg);
        io.emit('chat message', msg);
      });
    });
    /**
     * Listen on provided port, on all network interfaces.
     */
  
    server.listen(port, () => {
      console.log(`server running at http://localhost:${port}/`);
      console.log(`Socket.IO running at http://localhost:${port}/`);
    });
    server.on('error', onError);
    server.on('listening', onListening);
  
    /**
     * Normalize a port into a number, string, or false.
     */
  
    function normalizePort(val) {
      var port = parseInt(val, 10);
  
      if (isNaN(port)) {
        // named pipe
        return val;
      }
  
      if (port >= 0) {
        // port number
        return port;
      }
  
      return false;
    }
  
    /**
     * Event listener for HTTP server "error" event.
     */
  
    function onError(error) {
      if (error.syscall !== 'listen') {
        throw error;
      }
  
      var bind = typeof port === 'string'
        ? 'Pipe ' + port
        : 'Port ' + port;
  
      // handle specific listen errors with friendly messages
      switch (error.code) {
        case 'EACCES':
          console.error(bind + ' requires elevated privileges');
          process.exit(1);
          break;
        case 'EADDRINUSE':
          console.error(bind + ' is already in use');
          process.exit(1);
          break;
        default:
          throw error;
      }
    }
  
    /**
     * Event listener for HTTP server "listening" event.
     */
  
    function onListening() {
      var addr = server.address();
      var bind = typeof addr === 'string'
        ? 'pipe ' + addr
        : 'port ' + addr.port;
      debug('Listening on ' + bind);
    }
  }
};
复制代码

 参考:https://blog.csdn.net/enmengxu/article/details/87373979

posted @   夏秋初  阅读(3396)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示