簡體   English   中英

如何轉移這個 http Node.Js 在 https 上運行?

[英]How Can I Transfer This http Node.Js to run on https?

最近我創建了一個使用 http 的節點 js 和 webrtc 項目。 但我通知 webrtc 僅適用於 https。 那么如何將這個基於 http 的節點 js 文件傳輸到基於 https 的節點 js 文件中呢? 請幫我。

真的我不知道該怎么做。 所以請幫我完成它。 需要在 https 上運行此文件。 不在 http 中。 如您所見,以下代碼僅使用 http。 由於 webrtc 需要在 https 上運行,我只需要讓這個文件也可以在 https 上運行

var hat = require('hat')
var http = require('http')
var nodeStatic = require('node-static')
var ws = require('ws')

var PORT = process.argv[2] || 4000

var httpServer = http.createServer()
var staticServer = new nodeStatic.Server('./public')
var wsServer = new ws.Server({ server: httpServer })

var peers = {}
var waitingId = null
var count = 0

httpServer.on('request', function (req, res) {
  req.addListener('end', function () {
    staticServer.serve(req, res)
  }).resume()
})

wsServer.on('connection', onconnection)

function onconnection (peer) {
  var send = peer.send
  peer.send = function () {
    try {
      send.apply(peer, arguments)
    } catch (err) {}
  }

  peer.id = hat()
  peers[peer.id] = peer
  peer.on('close', onclose.bind(peer))
  peer.on('error', onclose.bind(peer))
  peer.on('message', onmessage.bind(peer))
  count += 1
  broadcast(JSON.stringify({ type: 'count', data: count }))
}

function onclose () {
  peers[this.id] = null
  if (this.id === waitingId) {
    waitingId = null
  }
  if (this.peerId) {
    var peer = peers[this.peerId]
    peer.peerId = null
    peer.send(JSON.stringify({ type: 'end' }), onsend)
  }
  count -= 1
  broadcast(JSON.stringify({ type: 'count', data: count }))
}

function onmessage (data) {
  console.log('[' + this.id + ' receive] ' + data + '\n')
  try {
    var message = JSON.parse(data)
  } catch (err) {
    console.error('Discarding non-JSON message: ' + err)
    return
  }

  if (message.type === 'peer') {
    if (waitingId && waitingId !== this.id) {
      var peer = peers[waitingId]

      this.peerId = peer.id
      peer.peerId = this.id

      this.send(JSON.stringify({
        type: 'peer',
        data: {
          initiator: true
        }
      }), onsend)

      peer.send(JSON.stringify({
        type: 'peer'
      }), onsend)

      waitingId = null
    } else {
      waitingId = this.id
    }
  } else if (message.type === 'signal') {
    if (!this.peerId) return console.error('unexpected `signal` message')
    var peer = peers[this.peerId]
    peer.send(JSON.stringify({ type: 'signal', data: message.data }))
  } else if (message.type === 'end') {
    if (!this.peerId) return console.error('unexpected `end` message')
    var peer = peers[this.peerId]
    peer.peerId = null
    this.peerId = null
    peer.send(JSON.stringify({ type: 'end' }), onsend)
  } else {
    console.error('unknown message `type` ' + message.type)
  }
}

function onsend (err) {
  if (err) console.error(err.stack || err.message || err)
}

function broadcast (message) {
  for (var id in peers) {
    var peer = peers[id]
    if (peer) {
      peer.send(message)
    }
  }
}

httpServer.listen(PORT, function () {
  console.log('Listening on port ' + PORT)
})
  1. 以低於 15.00 美元/年 (for.com) 的價格注冊一個站點域,包括 whois 保護。
  2. 創建一個免費的 Cloudflare 帳戶並設置您的新域名,配置 DNS 以代理和處理您計划在該域下托管的 IP。
  3. 通過 cloudflare 生成 SSL 密鑰,並在您的項目中使用證書。 只要 DNS 路由到您的家庭 IP 或服務器 IP,它就會保持 Z0E8433F9A1404F1F3DBA6026C。

出於測試目的,您可以使用假密鑰/證書,但在您執行上述步驟之前,這將始終顯示不安全。

在 NodeJS 中使用 HTTPS:

 const HTTPS = require('https'); const FILESYSTEM = require('fs'); // CREATE HTTP APP HERE THEN CREATE HTTPS SERVER FOR THE APP HTTPS.createServer({ key: FILESYSTEM.readFileSync(__dirname + '/certs/key.pem'), cert: FILESYSTEM.readFileSync(__dirname + '/certs/cert.pem') }, app).listen(443);

HTTPS 需要與域名匹配的安全證書。 用於生產用途的域名和證書都可以在線購買,並且都有到期日期,需要續訂。

該證書由兩個文件cert.pemkey.pem組成。

對於本地開發,可以為localhost域生成自簽名的不受信任的證書(通過 openssl 命令行工具)。

openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -subj '/CN=localhost'

原始代碼可以從“http”更新為“https”,這兩個文件需要加載並作為選項傳遞給https.createServer()

我還必須更新對“node-static”的調用,因為它不提供本地文件。

var hat = require('hat')
var https = require('https') // updated
const fs = require('fs');
var nodeStatic = require('node-static')
var ws = require('ws')

var PORT = process.argv[2] || 4000

const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

var httpServer = https.createServer(options) // updated
var staticServer = new nodeStatic.Server('./public')
var wsServer = new ws.Server({ server: httpServer })

var peers = {}
var waitingId = null
var count = 0

httpServer.on('request', function (req, res) { // updated
  staticServer.serve(req, res)
})

// the rest of the original code
// httpServer variable is now an HTTPS server instance


httpServer.listen(PORT, function () {
  console.log('Listening on port ' + PORT)
})

啟動服務器並訪問 https://localhost:4000 將提示您必須確認的不受信任的證書警告。

暫無
暫無

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

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